SQL 基于“”=”的注入
SQL Injection Based on ""=""
我是 SQL 的新手,所以请耐心等待(尽管我承认这可能只是我应该已经掌握的编程概念)...
有关可能的 SQL 注入向量的阅读表明,一种潜在的攻击模式是将用户名或密码字段设置为 "or ""="
。
一个示例用例是:
uName = getRequestString("UserName");
uPass = getRequestString("UserPass");
sql = "SELECT * FROM Users WHERE Name ='" + uName + "' AND Pass ='" + uPass + "'"
导致以下 SQL 代码行:
SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""=""
他们给出的推理是 WHERE ""=""
的计算结果总是为真。为什么会这样?我了解 or 1 = 1
如何计算为真,但此代码如何计算为真?
非常感谢您的帮助!
编辑:
我认为我最初的困惑源于将双引号读作转义符,而不是空字符串。这应该是显而易见的,所以谢谢!
忽略您不需要在该查询中注入这种特殊边缘情况的事实...
The reasoning they gave is that WHERE ''=''
always evaluates to true. How and why is this so?
''
只是一个空字符串常量。所以,从逻辑上讲,''
等于 ''
。这就像说 1=1,因为常数总是等于它自己。
写出:
SELECT
*
FROM
Users
WHERE
(Name = '' OR '' = '')
AND
(Pass = '' OR '' = '')
因为它是一个 OR 语句,每个条件中只有一个条件必须为真,但它必须在两个子句中都为真。
您必须始终检查变量是否包含在 SQL 语句中,或者如您所说,将导致崩溃:
if(!string.IsNullOrEmpty(uName) && !string.IsNullOrEmpty(uPass))
{
// SQL STATMENT
}
else
{
// ERROR ONE IS EMPTY
}
最好将这些变量绑定到参数以避免注入,请在此处查看我的回答以了解如何做到这一点:
null value exception when entering into database
我是 SQL 的新手,所以请耐心等待(尽管我承认这可能只是我应该已经掌握的编程概念)...
有关可能的 SQL 注入向量的阅读表明,一种潜在的攻击模式是将用户名或密码字段设置为 "or ""="
。
一个示例用例是:
uName = getRequestString("UserName");
uPass = getRequestString("UserPass");
sql = "SELECT * FROM Users WHERE Name ='" + uName + "' AND Pass ='" + uPass + "'"
导致以下 SQL 代码行:
SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""=""
他们给出的推理是 WHERE ""=""
的计算结果总是为真。为什么会这样?我了解 or 1 = 1
如何计算为真,但此代码如何计算为真?
非常感谢您的帮助!
编辑: 我认为我最初的困惑源于将双引号读作转义符,而不是空字符串。这应该是显而易见的,所以谢谢!
忽略您不需要在该查询中注入这种特殊边缘情况的事实...
The reasoning they gave is that WHERE
''=''
always evaluates to true. How and why is this so?
''
只是一个空字符串常量。所以,从逻辑上讲,''
等于 ''
。这就像说 1=1,因为常数总是等于它自己。
写出:
SELECT
*
FROM
Users
WHERE
(Name = '' OR '' = '')
AND
(Pass = '' OR '' = '')
因为它是一个 OR 语句,每个条件中只有一个条件必须为真,但它必须在两个子句中都为真。
您必须始终检查变量是否包含在 SQL 语句中,或者如您所说,将导致崩溃:
if(!string.IsNullOrEmpty(uName) && !string.IsNullOrEmpty(uPass))
{
// SQL STATMENT
}
else
{
// ERROR ONE IS EMPTY
}
最好将这些变量绑定到参数以避免注入,请在此处查看我的回答以了解如何做到这一点:
null value exception when entering into database