Mysql经典SQL注入(注释法:#或)

database

所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

我们永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们都需要对用户输入的数据进行过滤处理。

问题显现:

//组织SQL指令:获取用户信息

$sql = "select * from {$this->getTable()} where u_username = "{$username}"";

第一种SQL注入:

    当在前台用户名输入框中输入【" or 1#】后,即使数据库没有这个用户名,也能查出数据(全部数据)

第二种SQL注入:

    当在前台用户名输入框中输入【" or 1-- 】后,即使数据库没有这个用户名,也能查出数据(全部数据),注意:--后面是有空格的

解决方案:

两种SQL注入本质上都是Mysql的注释引起的,在#和-- 后面的内容会被忽略,就容易被用户钻空子

    -- SQL注入,要解决它,关键在于其后面的空格,只需在代码中用trim方法修饰用户名变量,那么-- SQL便不起作用了;

    #SQL注入,要解决它,关键在于不安全字符的屏蔽,而由于我是在php遇到这种情况,所以我介绍一下PHP中解决#SQL注入的方法:

        利用addslashes方法(为特殊字符增加斜杠,例如单引号、双引号、反斜线和NULL)修饰用户名变量 

//防止SQL注入:通过特殊符号改变SQL指令

$username = addslashes($username);

以上就是我所提供的注释SQL注入的解决方案,若您有更好的,可随时在评论区与我沟通o__o

以上是 Mysql经典SQL注入(注释法:#或) 的全部内容, 来源链接: utcz.com/z/533970.html

回到顶部