用户为 where in 子句提供的子查询是不是存在注入攻击?
Posted
技术标签:
【中文标题】用户为 where in 子句提供的子查询是不是存在注入攻击?【英文标题】:Is there an injection attack with a user supplied subquery for a where in clause?用户为 where in 子句提供的子查询是否存在注入攻击? 【发布时间】:2017-05-27 15:39:32 【问题描述】:我们有一项功能,允许用户使用 sql 语句过滤列表。
用户提供的语句本质上是这样使用的:
select * from table where id in (subquery) -- where subquery is given by the user
我尝试给它); delete from table; --
和delete from table returning id
但无济于事。
还有其他可能吗?我不担心用户看到数据,否则他们无法访问。
【问题讨论】:
1); delete from table; --
是的,如果原始子查询使用 SQL 字符串进行插值,则它容易受到注入。正确清理用户输入,不会有问题。
@GSerg 谢谢你,“工作”。
我的一个程序有类似的设置(用户应该通过完整的where
子句,我必须信任它)。在我的设置中,我有一个登录用户,它拥有被引用的对象(因此没有人可以作为该用户登录)和另一个用户,在该用户下执行所有此类查询(只有一个权限:从该用户读取数据桌子)。在此设置下,我不必担心where
是否有效。如果它在任何意义上都无效,就会有一个或另一个例外;只有当它是针对该单个表的正确 where
时才会执行。
如果用户想出一个很好的笛卡尔连接where
,这仍然存在 DoS 攻击的可能性,但是还有其他工具可以处理这个问题(例如 SQL Server 中的资源管理器)。
【参考方案1】:
您的问题是相互排斥的,因为您将 injection 与特定的 exploit 混淆了。
用户为 where in 子句提供的子查询是否存在注入攻击?
是的,当然。注入任意 SQL 代码的能力正是 SQL 注入。
我试过给它);从表中删除; -- 并从返回 id 的表中删除,但无济于事。
在大多数情况下,此特定查询不起作用。
还有其他可能吗?
是的,当然。主要是关于查看数据的用户,否则他们无法访问。
我不担心用户看到数据
所以请考虑清楚:您是关心整个 SQL 注入还是只关心特定子集。
【讨论】:
他们通常可以看到整个表格。子查询可以让他们过滤行。 不是看唯一的表,而是拥有对整个数据库的读取权限。 如何在子查询中工作?用户提供的唯一部分是子查询部分。我认为它不会泄漏数据。 @ThijsWouters 这么想成千上万的网站管理员,却发现信息被泄露了以上是关于用户为 where in 子句提供的子查询是不是存在注入攻击?的主要内容,如果未能解决你的问题,请参考以下文章