图1 添加input判断
这里的浸染便是要判断input,参数是自己定义的,对应的是下边的if ($this->webscan_post);
如果不是利用的该类判断,也要查看一下是否可以防止注入。

原来的判断格式:
if ($this->webscan_post) { foreach ($_POST as $key => $value) { if ($this->webscan_StopAttack($key, $value, $postfilter, "POST")) return true; } }
利用对应的格式添加如下判断:
if ($this->webscan_input) { foreach (input('post.') as $key => $value) { if ($this->webscan_StopAttack($key, $value, $postfilter, "POST")) return true; } } if ($this->webscan_input) { foreach (input('get.') as $key => $value) { if ($this->webscan_StopAttack($key, $value, $getfilter, "GET")) return true; } }
图3 修正往后,已经可以判断sql注入
以上岸后台账号为例:
如果验证账号密码是下边的格式,是可以绕过验证的。
$con=" user_name='".trim(input('post.user_name')."' and password='".md5(trim(input('post.password')))."'";$data = Db::name("admin")->field("role,user_name")->where($con)->find();
上岸后台:
图2 sql注入上岸
解释:
账号利用admin ' or '1=1 # 个中admin 任意,密码任意,即可上岸账号。
如下修正,不会被绕过:
$con['user_name'] = trim(input('post.user_name')); $con['password'] = md5(trim(input('post.password'))); $data = Db::name("admin")->field("role,user_name")->where($con)->find();
打印了语句,创造英文单引号变成了\',被转义了。