代码层面
1.对输入进行严格的转义和过滤
2.使用预处理和参数化
网络层面
1.通过WAF设备启用防SQL注入策略(或类似防护系统)
2.云端防护(360网站卫士,阿里云盾等)
推荐做法:使用PDO的prepare预处理(预处理+参数化)
PDO:PHP DATA OBJECT是一种统一的,各种数据库的访问接口
前端传入过来参数,当你去进行数据库操作的时候,在PDO里面,它去写sql的时候,不会直接把参数传进去,而是用参数化的占位符的方式去写这个参数
$pdo=new PDO(‘mysql:host=localhost;dbname=ant’,‘root’,‘root’);
$sql=“select * from admin where username=? and password=?”;
他去跟数据库交互的时候,他会通过预处理把这一段用占位符代替参数内容的这样一条sql语句,去跟数据库的驱动去交付,进行预处理,先把sql的这条逻辑进行执行跟编译
pdo->prepare($sql);//先不传参,先预处理
然后这个时候再把参数传进去
username,$password));
//以索引组的方式把参数传进去,而不是拼接,就成功防止了注入
在web应用服务器前部署WAF设备:topo
启动云端防护
攻击者dns解析到云厂商提供的IP时,当流量通过云端转发到真实的服务器上去时,云端防护集群,提供云WAF,DDOS清洗,SDN加速的功能