SQL注入来自不可信输入被拼成数据库语句的一部分。过滤引号或依赖WAF都不能代替安全查询实现,修复应覆盖每个数据输入与查询路径。
值使用参数化查询
通过可靠数据库接口绑定值,避免把请求参数直接拼接进语句。检查搜索、登录、后台筛选和批量接口,存储过程也需要检查内部是否继续拼接动态SQL。
字段与排序使用允许列表
表名、列名和排序方向通常不能像普通值一样绑定,应由程序中明确允许的映射决定。不能因为一个字段看起来像英文就接受为SQL标识符;分页数量同时限制类型和范围。
限制数据库身份能力
应用账号只获得必要操作权限,管理、迁移和备份使用独立身份。数据库错误向用户提供通用说明,详细排障信息进入受控日志,避免暴露结构和凭据。
复测原路径与业务功能
在授权测试环境验证特殊输入不会改变查询语义,同时检查中文、标点和正常筛选。代码审查确认所有相关拼接被处理,不能只修扫描器报告的一条URL。
参考资料
参数化覆盖实际查询路径
动态排序、表名等不能直接使用用户输入,应采用明确允许映射。
数据库账号限制权限,测试失败输入与后台路径;拦截某些关键词不能替代参数化与代码检查。
例如搜索查询已参数化,但导出排序直接拼接输入,该遗漏路径仍需修复。