SQL Inject注入漏洞的防范(以摘录为主)
SQL Inject注入漏洞的防范可分为两部分:代码层面和网络层面。
代码层面:1.对输入进行严格的转义和过滤。2.使用预处理和参数化
网络层面:1.通过WAF设备启用防SQL Inject注入策略(或类似防护系统)
2.云端防护(360网站卫士,阿里云盾等)
PHP防范转义+过滤:以php为例,可以写一个函数对前端输入进来的数据进行转义,将里面的特殊符号用mysql提供的方法进行转义例如转义:mysqli_real_escape_string($link, $data);
过滤:str_replace("%"," “, $_POST[‘username’]),把post里面的数据里面含有%的替换成空.
由于采用数据库的黑名单的形式进行转移过滤,由于代码升级较快,转义和过滤会有所疏忽,所以在sql注入防护不推荐使用。
推荐使用预处理和参数化的方法,以php为例有PDO预处理的方法,可以通过它提供的方法去操作数据库。
$username= $_GET[‘username’];
$password= $_GET[‘password’];
try{
$pdo=new PDO(‘mysql:host=localhost;dbname=ant’, ‘root’,‘root’);
$sql=“select* from admin where username=? and passowrd=?”;
$stmt= $pdo->prepare( $sql);//先不传