【发布时间】:2017-07-03 04:55:07
【问题描述】:
注射程序是:
SELECT UserId, Name, Password FROM Users WHERE UserId = 105 or 1=1;
但是,我的问题是注入查询在 sql 中是如何工作的?
【问题讨论】:
-
添加
or 1=1时,WHERE语句变得无关紧要,始终返回true,因此始终执行查询。
标签: sql sql-injection
注射程序是:
SELECT UserId, Name, Password FROM Users WHERE UserId = 105 or 1=1;
但是,我的问题是注入查询在 sql 中是如何工作的?
【问题讨论】:
or 1=1时,WHERE语句变得无关紧要,始终返回true,因此始终执行查询。
标签: sql sql-injection
当您在代码中将查询作为字符串时,就像这样
Query = "SELECT UserId, Name, Password FROM Users WHERE UserId = '" + sUserID + "'"
所以你通过 sUserID = "ABC' OR 1=1;"
这将被翻译成
SELECT UserId, Name, Password FROM Users WHERE UserId = 'ABC' OR 1=1
【讨论】:
由于条件1=1 始终为true,将其添加到WHERE 语句的末尾会使其无关紧要,并且始终为true,就好像WHERE 语句根本不存在一样。因此,无论在WHERE 语句中添加任何其他条件,始终都会执行查询。
在您提供的示例中,如果您允许您的用户写下自己的userID,他们可以在输入字段或网站的 URL 地址中写下105 or 1=1,因为or 1=1 使UserId=105 无用,并且查询将始终选择数据,因此是 SQL 注入。
【讨论】: