Php 检测查询中的常见SQL注入模式
我正在使用ezSQL PHP类进行MySQL查询。由于我的所有查询都通过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->query()
函数,因此我认为最好实现一种方法,从$ezsql->query()
中阻止常见的SQL注入技术
例如,最常见的是1=1
。所以这个正则表达式应该能够阻止它的所有变化:
preg_match('/(?:"|\')?(\d)(?:"|\')?=(?:"|\')?\1(?:"|\')?/',$query);
这将阻止“1”=“1”
,'1'=1
,1=1
,等等
这是个好主意吗?如果是,还有什么其他常见模式
编辑:忘了提到,我确实使用验证和卫生。这只是额外的预防措施
这是个好主意吗
没有。原因有二:
不是出于一些模糊的想法而随意行动,而是理智和合理的行动 只要您转义并引用进入查询的数据,并且为转义函数设置了正确的编码,就没有理由感到悲伤。
只要您使用准备好的语句将数据添加到查询中,就没有理由感到悲伤。
只要您根据硬编码的白名单过滤SQL标识符和关键字,就没有理由感到悲伤。更好的方法是使用一些允许您执行准备好的语句+参数绑定的工具,这将完全避免最常见的攻击。