这是我参与「第四届青训营」笔记创作活动的的第8天。
SQL 注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过 SQL 语句,实现无账号登录,甚至篡改数据库。
SQL 注入攻击是通过将恶意的 SQL 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。
当我们访问动态网页时, Web 服务器会向数据访问层发起 SQL 查询请求,如果权限验证通过就会执行 SQL 语句。
这种网站内部直接发送的 SQL 请求一般不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造 SQL 语句,如果用户输入的数据被构造成恶意 SQL 代码,Web 应用又未对动态构造的 SQL 语句使用的参数进行审查,则会带来意想不到的危险。
用户在输入用户名的时候直接输入万能密码:xxx' or 1 #
,那么最后拼接的SQL会变为:select * from user where name = 'xxx' or 1 # and password = '123456';
#符号代表SQL语法中的注释,上面的SQL就如同 select * from user where name = 'xxx' or 1
。这样是可以查询到用户信息的,所以用户就登录了系统。
addslashes
函数,我们可以给$_GET
、$_POST
、$_COOKIE
等几个数组进行转义。