0

我正在构建一个查询以通过向用户输入的数据附加一些附加信息来对数据库运行,如下所示:

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”语句来对数据库执行。

4

1 回答 1

0

SQL 语句前面有什么并不重要。只要您将 sql 作为动态语句执行,它就是 SWeko 已经指出的 SQL 注入的高候选。您可以自己尝试一下。创建一个名为“DeleteMe”的表。然后在您的文本框中输入以下内容1=1));DROP TABLE DeleteMe;--:然后检查您的数据库并查看 DeleteMe 表已消失。

此外,虽然这不能回答您的问题,但我担心您查询中的“1=2”。它几乎肯定不会产生任何结果,希望这只是一个“不好的例子”。

于 2013-01-23T07:51:30.467 回答