SQL 注入 - Web 服务器上的全局过滤器

SQL Injection - global filter on web server

是否可以过滤包含 SQL 注入值的 Web 请求?

有 Web 应用程序防火墙或数据库防火墙试图执行此操作。

您必须定义接受输入的模式,或者定义允许的文字输入列表。

其中一些产品的工作原理是让您 "train" 通过 运行 在您知道没有 SQL 注入攻击的情况下运行您的应用程序,并且它会记录SQL 已知合法的查询。然后关闭训练模式,随后防火墙将阻止任何与其允许的输入列表不匹配的内容。

此解决方案存在的问题:

  • 如果您需要更改您的网络应用程序,您需要重新训练防火墙,然后才能部署您的应用程序。

  • 它将您限制为 运行 SQL 可以与此类列表匹配的查询。如果您的 SQL 是高度可变的(例如,有条件地在 WHERE 子句中执行额外连接或额外条款的动态查询),则很难为允许的内容制定规则。

  • 基于防火墙的解决方案无法阻止 SQL 存储过程中发生的注入。
  • 它给您一种错误的安全感,诱使您在编写安全代码时松懈。

最终,您最好通过使用查询参数来保护自己免受代码中的 SQL 注入。

这几乎是所有关于 SQL Stack Overflow 注入的问题的答案!


另请参阅我过去关于 Web 应用程序防火墙或数据库防火墙的一些回答:

  • How can we prevent SQL-Injection from MySQL?
  • How to check for the sanity of sql query in PHP
  • How to block SQL injection attacks by filtering the URL parameters in php?
  • Writing a database firewall for blocking SQL Injection attacks