SQL注入
根本解决办法
- SQL 文全部使用占位符实装
- SQL 里有变量的地方一般使用占位符来实装。占位符有静态和动态两种办法。使用的比较多的是静态占位符,也就是 SQL 的 ISO/JIS 标准里的 Prepared Statement。
- 无法使用占位符、只能拼接字符串组装 SQL 时,对所有拼入 SQL 的变量进行转义
- 按照所用数据库的规则,把对 SQL 有特殊含义的字符(如
'、\等)全部转义(例如'→'')。这只是占位符无法使用时的替代手段,优先级低于占位符。
- 按照所用数据库的规则,把对 SQL 有特殊含义的字符(如
- 不要直接在参数里直接指定 SQL 有的网站直接在 hidden 参数里写 SQL,这是不可取的。
保险对策
- 数据库返回的错误信息不要直接显示在浏览器上
- 数据库返回的错误信息一般会有数据库种类,引发错误的 SQL 原文等信息。这些信息会被攻击者不怀好意地利用。
- 给数据库账号合理的权限 只给应用所使用的数据库账号最少的权限。