并不是使用双引号就产生注入漏洞,而是sql语句没有用单引号包裹着变量,比如
$sql .= " AND d.v_id in (". $ids .")";
这个双引号只是用来拼接SQL语句而已,如果ids是1,2,3的话$sql的变量值就是 AND d.v_id in (1,2,3) 。 这样我们就可以形成payload,把sql语句改成 AND d.v_id in (1,2,3) or 1=1--)
如果拼接语句改成
$sql .= " AND d.v_id in ('". $ids ."')"; 在双引号前后添加了单引号。 这样就不会产生漏洞。同时sql语句也会报错,可能因为作者想不出其他办法所以就用这种方法来是实现
这种注入主要是没有单引号的防御,比如像
$row = $dsql->GetOne("Select * From `sea_myad` where aid='$id'"); 由于程序传参会经过addslashes函数,所以带有单引号的语句是无法注入成功。
Wing
荣
@WingWing
@荣网络小白
荣
@网络小白网络小白
荣
@网络小白