Database 对于where in子句,用户提供的子查询是否存在注入攻击?

Database 对于where in子句,用户提供的子查询是否存在注入攻击?,database,sql-injection,Database,Sql Injection,我们有一个特性,允许用户使用sql语句过滤列表 用户提供的语句基本上是这样使用的: select * from table where id in (subquery) -- where subquery is given by the user 我试着给它);从表中删除--和从返回id的表中删除,但无效。 还有其他的可能性吗?我不担心用户看到数据,否则他们无法访问。您的问题是相互排斥的,因为您将注入与特定的漏洞混淆 对于where in子句,用户提供的子查询是否存在注入攻击 当然可以。注入任

我们有一个特性,允许用户使用sql语句过滤列表

用户提供的语句基本上是这样使用的:

select * from table where id in (subquery) -- where subquery is given by the user
我试着给它
);从表中删除--
从返回id的表中删除,但无效。

还有其他的可能性吗?我不担心用户看到数据,否则他们无法访问。

您的问题是相互排斥的,因为您将注入与特定的漏洞混淆

对于where in子句,用户提供的子查询是否存在注入攻击

当然可以。注入任意SQL代码的能力正是SQL注入的能力

我试着把它给我;从表中删除;--并从返回id的表中删除,但无效

在大多数情况下,这个特定的查询不起作用

还有其他的可能性吗

当然可以。主要是关于用户看到的数据,他们不能访问,否则

我不担心用户看到数据


因此,请下定决心:您是关心整个SQL注入,还是只关心特定的子集。

1);从表中删除--是,如果原始子查询是用SQL字符串插入的,则它容易被插入。正确地清理用户输入不会有问题。@GSerg谢谢,这“有效”。我的一个程序有类似的设置(用户应该传递一个完整的
where
子句,我必须信任它)。在我的设置中,我有一个拥有被引用对象的loginness用户(这样就没有人可以作为该用户登录),还有一个用户执行所有这些查询(该用户只有一个权限:从该表读取数据)。在这种设置下,我不必担心
where
是否有效。如果它在任何意义上都是无效的,就会有这样或那样的例外;只有当它是针对单个表的适当的
where
时,它才会执行。如果用户提出了一个很好的笛卡尔连接
where
,那么仍然存在DoS攻击的可能性,但是还有其他工具可以处理这个问题(例如SQL Server中的资源调控器)。他们通常可以看到整个表。子查询是用来过滤行的。它不是用来查看唯一的表,而是用来读取整个数据库。在子查询中如何工作?用户提供的唯一部分是子查询部分。“我不认为它会泄露数据。”ThijsWouters这样认为,成千上万的网站管理员,结果发现信息被泄露了