跳到主要内容

SQL注入

根本解决办法

  • SQL 文全部使用占位符实装
    • SQL 里有变量的地方一般使用占位符来实装。占位符有静态和动态两种办法。使用的比较多的是静态占位符,也就是 SQL 的 ISO/JIS 标准里的 Prepared Statement。
  • 无法使用占位符、只能拼接字符串组装 SQL 时,对所有拼入 SQL 的变量进行转义
    • 按照所用数据库的规则,把对 SQL 有特殊含义的字符(如 '\ 等)全部转义(例如 ''')。这只是占位符无法使用时的替代手段,优先级低于占位符。
  • 不要直接在参数里直接指定 SQL 有的网站直接在 hidden 参数里写 SQL,这是不可取的。

保险对策

  • 数据库返回的错误信息不要直接显示在浏览器上
    • 数据库返回的错误信息一般会有数据库种类,引发错误的 SQL 原文等信息。这些信息会被攻击者不怀好意地利用。
  • 给数据库账号合理的权限 只给应用所使用的数据库账号最少的权限。