首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防御'WAITFOR延迟‘sql注入攻击?

防御'WAITFOR延迟‘sql注入攻击?
EN

Stack Overflow用户
提问于 2010-01-07 21:35:46
回答 6查看 18.4K关注 0票数 7

问题

在我们的java应用程序中,我们需要防范'WAITFOR‘sql注入攻击。

背景

这太长了。跳到“解决方案”?如果您有急事,请在下面的部分中

我们的应用程序主要使用准备好的语句和可调用的语句(存储过程)访问数据库。

在一些地方,我们动态地构建和执行用于选择的查询。在这个范例中,我们使用条件对象来构建查询,这取决于用户输入条件。例如,如果用户为first_name和last_name指定值,则结果查询总是如下所示:

代码语言:javascript
复制
SELECT first_name,last_name FROM MEMBER WHERE first_name ='joe' AND last_name='frazier'

(在本例中,用户将指定"joe“和"frazier”作为他/她的输入值。如果用户有或多或少的批判性,我们就会有更长或更短的查询。我们发现这种方法比使用准备好的语句更容易,比存储过程更快/更有表现力。

攻击

漏洞审核报告了sql注入失败。攻击者将“last_name”参数的值“frazier WAITFOR”延迟'00:00:20‘注入,导致以下sql:

代码语言:javascript
复制
   SELECT first_name,last_name FROM MEMBER WHERE first_name ='joe' AND last_name='frazier' WAITFOR DELAY '00:00:20'

结果:查询成功执行,但执行时间为20秒。攻击者可以将数据库池中的所有数据库连接都捆绑起来,从而有效地关闭站点。

--关于这种“WAITFOR延迟”攻击的几点观察

  • I曾经想过,由于我们使用了语句executeQuery(String),所以不会受到sql注入的影响。executeQuery(字符串)不会执行DML或DDL (删除或删除)。executeQuery(String)会阻塞分号,因此“Bobby”范式将失败(即用户输入参数的'frazier;DROP成员‘。看见。http://xkcd.com/327/)
  • The ' WAITFOR‘攻击在一个重要方面不同:WAITFOR修改现有的“SELECT”命令,而不是单独的命令。
  • 攻击只对结果查询中的“最后一个参数”起作用。即‘'WAITFOR’必须发生在sql语句

的末尾

解决方案,廉价黑客,还是两者兼而有之?

最明显的解决方案是简单地在where子句中添加“和1=1”。

生成的sql立即失败,并挫败攻击者:

代码语言:javascript
复制
   SELECT first_name,last_name FROM MEMBER WHERE first_name ='joe' AND last_name='frazier' WAITFOR DELAY '00:00:20' AND 1=1

问题

vulnerabilities?

  • I
  • 是一个可行的解决方案吗?
  • 是否对其他类似的
  • 进行辩护,认为最好的选择是使用预先准备好的语句。更多的工作,但不那么脆弱。--
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-01-07 21:45:24

处理SQL注入的正确方法是使用参数化查询。其他的一切都在风中撒尿。它可能会工作一次,甚至两次,但最终你会被那种温暖的感觉击中,上面写着“你搞砸了,糟糕!”

无论您做什么,除了参数化查询,都将是次优的,这将取决于您自己来确保您的解决方案没有需要修补的其他漏洞。

另一方面,参数化查询是不受限制的,可以防止所有这些攻击。

票数 25
EN

Stack Overflow用户

发布于 2010-01-07 21:40:20

SQL注入就是SQL注入-- WAITFOR DELAY没有什么特别之处。

在这个时代,绝对没有理由不使用准备好的语句来进行如此简单的查询。

(编辑:好吧,不是“绝对”-但几乎没有任何借口)

票数 11
EN

Stack Overflow用户

发布于 2010-01-07 21:44:19

我认为您自己提出了解决方案:参数化查询

您如何发现动态构建的查询比使用存储过程更快?一般来说,情况往往正好相反。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2023854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档