【发布时间】:2015-09-03 17:25:11
【问题描述】:
我是 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 如何评估为真,但这段代码如何评估为真?
非常感谢您的帮助!
编辑: 我认为我最初的困惑源于将双引号读取为转义符,而不是空字符串。这应该很明显,所以谢谢!
【问题讨论】:
-
我假设您的回答是
'而不是"。我只知道 MSSQL 和双引号在那里不起作用……也许在其他版本中有所不同?
标签: sql security sql-injection