一、SQL 注入定义
- 所谓 sql 注入,就是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 sql 命令。具体来说,就是利用现有的应用程序,将恶意的 SQL 命令注入到后台数据库引擎执行的能力,可以通过在 Web 表单中输入恶意的 SQL 语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行 SQL 语句,比如先前很多影视网站泄露 VIP 会员密码就是通过 web 表单递交的查询字符串爆出的
二、SQL 注入原理
SQL 注入攻击指的是通过构建特殊的输入作为参数传入 web 应用,主要原因是程序没有细致地过滤用户输入的数据,只是非法数据侵入系统。
SQL 注入可分为平台层注入和代码层注入,平台层注入由不安全的数据库配置或数据库平台的漏洞所致;代码层注入主要是由于程序员对输入未进行细致地过滤,从而执行了非法查询
三、SQL 注入防护
使用 PreparedStatement
采用预编译语句集,内置了处理 SQL 注入的能力
输入验证
检查用户输入的合法性,前后端一起进行输入校验,使用正则表达式过滤传入的参数
错误消息处理
要避免一些详细的错误信息
加密处理
将用户登录名、密码等数据加密保存
存储过程来执行所有查询
SQL 参数的传递方式将放置攻击者利用单引号和连接字符实施攻击,使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用者的存储过程的安全上下文
使用专业的漏洞扫描工具
确保数据库安全
锁定数据库的安全,只给访问数据库的 web 应用功能所需的最低权限,撤销不必要的公共许可,使用强大的加密技术来保护敏感数据并维护审查跟踪
发布之前做安全评审
附:
存储过程
存储过程(stored procedure) 是在大型数据库系统中,一组为了完成特定功能的 SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数来执行它。存储过程是数据库中的一个重要对象。