SQL 注入、查询构造与数据库权限
Web 安全与XSS、CSRF、SQL 注入与权限安全#Python全栈#第十八阶段#Web 安全与XSS、CSRF、SQL 注入与权限安全#SQL 注入、查询构造与数据库权限约 817 字 · 2 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
SQL 注入的核心成因是什么?
追问 把搜索词拼接进 SQL 时,数据怎样被当作查询语法解释?参数类型正确与查询结构安全为什么是两件事?
参数化查询怎样把 SQL 结构与数据分开?
追问 DB-API 参数传递与 Python 字符串格式化有什么区别?占位符语法由谁决定,为什么不能先拼接字符串再交给执行方法?
使用 SQLAlchemy text 或 Django RawSQL 时,怎样保持参数绑定?
追问 字符串插值发生在绑定之前会有什么风险?怎样检查查询与参数是否分别传递,同时避免日志记录敏感参数?
使用 ORM 是否意味着项目已经不可能存在 SQL 注入?
追问 原始查询、动态表达式和第三方扩展需要审查哪些入口?为什么应检查数据流,而不是只根据项目引入了 ORM 下结论?
排序字段、表名或列名为什么不能简单当成普通值参数绑定?
追问 用户可选择按日期或成绩排序时,怎样用固定映射构造表达式?非法字段、方向与关联字段怎样拒绝?
LIKE 搜索中的通配符与 SQL 注入有什么区别?
追问 用户希望搜索字面上的百分号或下划线时怎样约定?参数绑定后,为什么仍需考虑匹配范围、查询成本和业务语义?
动态 IN 条件与批量查询怎样安全构造?
追问 列表展开、空列表和元素数量上限怎样处理?为什么不能把用户列表直接连接为一段 SQL,授权过滤还需要放在哪里?
存储过程与数据库权限怎样影响注入风险和后果?
追问 存储过程内部拼接 SQL 是否仍需保护?应用账号只获得所需读写权限后,哪些高风险操作应被数据库拒绝?
为什么过滤引号、删除关键字或手动转义不能替代参数化?
追问 编码、数据库方言和不同语法位置怎样增加复杂性?如何把防护落实到统一查询构造方式,而不是维护不断扩大的黑名单?
怎样验证查询修复既防止注入,又保持正常搜索功能?
追问 包含标点、中文、通配符和空值的数据怎样覆盖?如何核对结果范围、查询参数和数据库副作用,避免只检查接口没有报错?
数据库核对资料: OWASP:SQL Injection Prevention。