php防sql注入

原始没有防sql注入操作:

public function sql_export(Request $request){
        $username = $request -> get("username");
        $password = $request -> get("password");

        $data = Db::table("userinfo")
            -> where("username = '{$username}' and password = '{$password}'")
            -> select();
        var_dump(Db::table("userinfo") -> getLastSql());die();
    }

  这样使用postman调用输入参数是:?username=xx&password=1' or password != ""' 结果是:,这个sql的条件都不正确却能够查询出结果,这无疑是危险的漏洞.

tp5框架防sql操作配置:

tp5.1的app.php中的default_filter配置改为:

'default_filter'         => 'trim,strip_tags,addslashes,htmlspecialchars',
再次调用结果:

,现在查询结果为空,获取不到结果集了.如果不在配置文件里修改配置,使用tp5写法时保持写法规范,如图
-> where(["username" => $username, "password" => $password])
where操作使用数组形式也可以避免sql注入.
也可以在代码里用addslashes方法对接收到的参数进行处理,结果是一样的.
$username = addslashes($request -> get("username"));
$password = addslashes($request -> get("password"));

  亲手测试了一下,加深印象.

 

posted on 2020-07-21 16:37  EchoBao  阅读(255)  评论(0编辑  收藏  举报