sql注入之or 1 = 1

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恒成立为真,则全真