备忘:进一步强化SQL执行前的检查
之前在某处提过一嘴, 我已经在框架层面提供了依靠bin2hex-unhex实现的防注入机制。 如果全项目都能落实到位, 100%没有被注入的风险。
当然如何你能全项目使用预编译的SQL的方式,那可以直接不用看下文了。
我这是在处理一个历史项目。没有精力做到全项目清理一次。
今天又研究了一下网上讨论的注入方式, 打算进一步的强化检查。
先写写,备忘。
if(substr_count($sql,"@")>=3){ echo "此SQL不安全,需要改造。";}
if(substr_count($sql,'\')>=3){ echo "此SQL不安全,需要改造。";}
if(substr_count($sql,"$")>=3){ echo "此SQL不安全,需要改造。";}
if(substr_count($sql,"/*")>=3){ echo "此SQL不安全,需要改造。";}
if(substr_count($sql,"&")>=3){ echo "此SQL不安全,需要改造。";}
if(substr_count($sql,"%")>=3){ echo "此SQL不安全,需要改造。";}
if(substr_count($sql,"#")>=3){ echo "此SQL不安全,需要改造。";}
if(substr_count(strtolower($sql),"#")>0){ echo "此SQL不安全,需要改造。";}
基本上就是把特殊字符直接掐死光。(union 啥的之前的版本已经完成检查了)
经过这个强制,一旦测试中出现报错,则可以找到相应的代码改为hex-unhex的方式。
有待实现,有待验证。。。。