SQL注入万能语句' or 1='1详解
' or 1='1是SQL注入的万能语句,可以通过它轻松改变SQL语句的逻辑关系,从而产生背离原SQL语句的效果,比如绕过用户密码验证;
假设存在以下用户信息表:
id | username | password |
---|---|---|
1 | hello | world |
存在以下sql语句用于验证username和password是否正确,如正确则存在查询结果,不正确则没有查询结果,表示用户名或密码错误:
SELECT * FROM test.user WHERE username='hello' and password='world';
当输入的用户名为hello,密码为world时存在查询结果,表示用户名与密码输入正确;
可是,永远不要相信用户的输入;因为上面这条SQL语句存在SQL注入漏洞,且看:
SELECT * FROM test.user WHERE username='' or 1='1' and password='anyxxxxx';
当username值为' or 1='1
时,SQL语句的逻辑表达式结构被修改了,因为 or 1='1' ,致使不论密码是否正确,其验证都将通过;
这就是一个典型的通过SQL注入绕过用户名与密码验证的漏洞!
如何防范SQL注入
永远不要相信用户的输入;要对用户的输入进行过滤和参数化;
永远不要使用以下方法组合SQL语句:
sql = `SELECT * FROM test.user WHERE username='` + username + `' and password='` + password + `';`