AND / OR操作员如何工作?

时间:2018-10-06 10:10:32

标签: sql

我正在阅读有关sql的书,我看到一些使用or / and的语句,但我不理解它们:

这是主要声明:

SELECT ∗
FROM administrators
WHERE username = ’’ AND password = ’’;

如果有人尝试执行sql绕过,他会这样做:

SELECT ∗
FROM administrators
WHERE username = ” OR ‘1’=‘1’ AND password = ”;

或此

SELECT ∗
 FROM administrators
 WHERE (username = ’’) OR (‘1’=‘1’ AND password = ’’);

这两个语句如何获得相同的结果,我不理解AND / OR在这些语句中如何工作..

最后一个问题是这些语句如何返回数据库中的所有值(绕过auth):

select *
from users
where (username = '') or (1=1) or (1=1 AND password = '')  ;

OR

SELECT ∗
 FROM administrators
 WHERE username = ’’ AND
       password = ’’ OR
       1’=‘1’;

2 个答案:

答案 0 :(得分:0)

简单的解释:

SELECT ∗ FROM administrators WHERE username = ” OR ‘1’=‘1’ AND password = ”;

如果用户名存在并且密码错误,它将返回该用户名的所有列,否则不返回任何内容。

SELECT ∗ FROM administrators WHERE (username = ’’) OR (‘1’=‘1’ AND password = ’’);

返回与上面相同的内容,括号没关系。

SELECT ∗ FROM administrators WHERE username = ’’AND password = ’’  OR ‘1’=‘1’ ;

这有所作为,即使用户名和密码都错误,它也会返回完整的*列。 [用于全表数据的SQL注入的最佳选择]

select * from users where (username = '') or (1=1) or (1=1 AND password = '') ;

与上述结果相同

以这种方式很容易想到它: 在where之后引入的任何AND / OR条件与第一个约束条件配对,在此之后引入的任何其他条件都是其自身的约束条件。

WHERE condition1 OR/AND condition1-pair AND separate condition

答案 1 :(得分:0)

您可以将AND视为乘法,或将OR视为加法,将true语句视为1,将false语句视为0。例如,语句

SELECT  .... WHERE y = 0 AND x < 1 OR 1 = 1

    will always be true, because 
    1*1 + 1 = 1
    0*0 + 1 = 1
    1*0 + 1 = 1

(0和1是布尔值,不是十进制)