select * from users where username='$username' and password='$password'
众所周知,
一般的结构查询语句的结构如下:
SELECT *
FROM table_a
WHERE x=y
其中,以上语句的select,from,where是不区分大小写的,一般分行写select,from,where语句。select一般是查询结果要展示的字段,from后一般是要查询的表名,where是进行行数据筛选的条件。
而sql注入中,username和passwd未知的情况下,我们可以通过注入来绕过后端的检测,比如
or 1 = 1
select * from users where username=' ' or 1='1' and password='123'
注:输入的是 ' or 1 = '1,单引号必须带,不然会语法错误,应为有逻辑关系的存在,and优先级比or高,所以先执行and后的内容与前面相匹配,而passwd为123是真,(数据库里保存的passwd值不存在猜测值时,建议前后同时饶过)看前面的内容username的值,而这里出现了or,逻辑比较的时候,1=1恒成立,也就意味着and前真后真是成立的,从而进行绕过
还有一种,or 1= 1#,在sql语法里,#是注释符以后的内容全省略,
且SQL语句中where相当于判断语句,由 or 连接,则:
select * from users where username=' ' or 1=1#' and password='ijcjds'
等于
select * from users where username=' ' or 1=1
or进行运算,1=1恒成立为真,则全真