Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检测查询中的常见SQL注入模式_Php_Mysql_Sql_Regex_Sql Injection - Fatal编程技术网

Php 检测查询中的常见SQL注入模式

Php 检测查询中的常见SQL注入模式,php,mysql,sql,regex,sql-injection,Php,Mysql,Sql,Regex,Sql Injection,我正在使用ezSQL PHP类进行MySQL查询。由于我的所有查询都通过$ezsql->query()函数,因此我认为最好实现一种方法,从$ezsql->query()中阻止常见的SQL注入技术 例如,最常见的是1=1。所以这个正则表达式应该能够阻止它的所有变化: preg_match('/(?:"|\')?(\d)(?:"|\')?=(?:"|\')?\1(?:"|\')?/',$query); 这将阻止“1”=“1”,'1'=1,1=1,等等 这是个好主意吗?如果是,还有什么其他常见模式

我正在使用ezSQL PHP类进行MySQL查询。由于我的所有查询都通过
$ezsql->query()
函数,因此我认为最好实现一种方法,从
$ezsql->query()
中阻止常见的SQL注入技术

例如,最常见的是
1=1
。所以这个正则表达式应该能够阻止它的所有变化:

preg_match('/(?:"|\')?(\d)(?:"|\')?=(?:"|\')?\1(?:"|\')?/',$query);
这将阻止
“1”=“1”
'1'=1
1=1
,等等

这是个好主意吗?如果是,还有什么其他常见模式

编辑:忘了提到,我确实使用验证和卫生。这只是额外的预防措施

这是个好主意吗

没有。原因有二:

  • 你做错了(是的,你只是简单的SQL黑名单方法失败了)。不,我不会告诉你如何改进,因为2:
  • 这是一种黑名单方法。您不应该在数据库类本身内部使用黑名单方法。这不是额外的预先警告,只是没有用。例如,可以在Web服务器的请求级别额外添加黑名单
  • 相反,使用现有的黑名单,不要重新发明轮子。如果您想了解如何开发自己的SQL黑名单层,请帮助开发此类现有组件。这种安全性不是开箱即用的,所以你可以直接提出像你这样的问题,实际上你可以期待具体的答案。保重

    这是个好主意吗

    绝对不是

    每次我在互联网论坛上看到这样的建议,我想知道,如果这个论坛运行的软件遵循这样的模式会怎么样?一个糟糕的发明家将无法共同提出他们的解决方案,因为软件会阻止帖子

    额外的预防措施不会有什么坏处。安全总比后悔好

    正如我在上面指出的,它显然很痛。不能处理某些奇怪数据部分的数据库是胡说八道

    此外,我相信只有知识才能让你安全。
    不是出于一些模糊的想法而随意行动,而是理智和合理的行动

    只要您转义并引用进入查询的数据,并且为转义函数设置了正确的编码,就没有理由感到悲伤。
    只要您使用准备好的语句将数据添加到查询中,就没有理由感到悲伤。

    只要您根据硬编码的白名单过滤SQL标识符和关键字,就没有理由感到悲伤。

    更好的方法是使用一些允许您执行准备好的语句+参数绑定的工具,这将完全避免最常见的攻击。