Mysql经典SQL注入(注释法:#或)
所谓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