我正在构建一个针对数据库运行的查询,方法是在用户输入的数据中添加一些附加信息,如下所示:
SELECT * FROM vBranch WHERE (((BranchIsActive = 'Yes' AND BranchIsValid =
'Yes') AND BranchIsInternational = 'Yes' AND 1=2) AND
vBranch.BranchSecurityGroup=1).
这部分:
SELECT * FROM vBranch WHERE ((
附加了我,
和这部分:
(BranchIsActive = 'Yes' AND BranchIsValid = 'Yes') AND BranchIsInternational
= 'Yes'
是用户输入的值
和这部分:
AND 1=2) AND vBranch.BranchSecurityGroup=1)
也附加在我身上。
我怀疑用户是否可以编写任何排除我在用户输入数据之前和之后附加的字符串的查询并仅执行用户针对数据库输入的数据?可能吗? 有一点需要注意的是,除了“select”语句之外,我也限制了一些DML和DDL语句,因为我正在构建一个“select”语句来对数据库执行。
答案 0 :(得分:0)
在SQL语句前面有什么并不重要。只要您将sql作为动态语句执行,它就是SWeko已经指出的SQL注入的高候选者。你可以亲自尝试一下。创建一个名为“DeleteMe”的表。然后在文本框中输入以下内容:1=1));DROP TABLE DeleteMe;--
;然后检查您的数据库,看看DeleteMe表已经消失。
此外,虽然这不能回答您的问题,但我担心您的查询中的“1 = 2”。它几乎肯定不会产生任何结果,希望这只是一个“不好的例子”。