- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题
我们需要防御 Java 应用程序中的“WAITFOR DELAY”sql 注入(inject)攻击。
背景
[这很长。跳至“解决方案?”如果您很着急,请参阅下面的部分]
我们的应用程序在访问数据库时主要使用准备好的语句和可调用语句(存储过程)。
在一些地方,我们动态构建并执行查询以进行选择。在此范例中,我们使用条件对象根据用户输入条件构建查询。例如,如果用户指定了first_name和last_name的值,则查询结果总是如下所示:
SELECT first_name,last_name FROM MEMBER WHERE first_name ='joe' AND last_name='frazier'
(在此示例中,用户将指定“joe”和“frazier”作为他/她的输入值。如果用户有更多或更少的条件,我们将会有更长或更短的查询。我们发现这种方法更容易比使用准备好的语句并且比存储过程更快/性能更高)。
攻击
漏洞审核报告 SQL 注入(inject)失败。攻击者为“last_name”参数注入(inject)了值“frazier WAITFOR DELAY '00:00:20”,从而产生了以下 SQL:
SELECT first_name,last_name FROM MEMBER WHERE first_name ='joe' AND last_name='frazier' WAITFOR DELAY '00:00:20'
结果:查询执行成功,但执行时间为 20 秒。攻击者可以占用数据库池中的所有数据库连接并有效地关闭您的站点。
关于此“WAITFOR DELAY”攻击的一些观察
我曾以为,因为我们使用了 StatementexecuteQuery(String),所以我们可以安全地避免 sql 注入(inject)。 executeQuery(String) 不会执行 DML 或 DDL(删除或删除)。并且executeQuery(String) 被分号阻塞,因此“Bobby Tables”范例将失败(即用户输入“frazier; DROP TABLE member”作为参数。请参阅。http://xkcd.com/327/)
“WAITFOR”攻击在一个重要方面有所不同:WAITFOR 修改了现有的“SELECT”命令,并且不是一个单独的命令。
攻击仅适用于结果查询中的“最后一个参数”。即'WAITFOR'必须出现在sql语句的最后
解决方案、廉价黑客,还是两者兼而有之?
最明显的解决方案只需将“AND 1=1”添加到 where 子句中。
生成的 SQL 立即失败并挫败了攻击者:
SELECT first_name,last_name FROM MEMBER WHERE first_name ='joe' AND last_name='frazier' WAITFOR DELAY '00:00:20' AND 1=1
问题
最佳答案
处理SQL注入(inject)的正确方法是使用参数化查询。其他一切都只是随风而去。它可能会起作用一次,甚至两次,但最终你会被那种温暖的感觉击中,“你搞砸了,严重了!”
无论您做什么,除了参数化查询之外,都将不是最佳的,并且您需要确保您的解决方案没有其他需要修补的漏洞。
另一方面,参数化查询开箱即用,可以防止所有这些攻击。
关于sql-server - 防御 'WAITFOR DELAY' SQL注入(inject)攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2023854/
我正在 node.js 中开发一个项目,该项目使用 mongoose 来处理 MongoDB。我想防御 XSS 攻击。建议的方法是什么?我找到了这个: https://www.npmjs.com/pa
如果某些 .html 文件只能通过密码匹配(在 PHP 中实现)与数据库中的哈希码来访问,用户仍然可以猜测可能的 .html 文件名并看到所谓的特权页面。查看特权页面的源代码,然后用户可以看到在该 .
问题 我们需要防御 Java 应用程序中的“WAITFOR DELAY”sql 注入(inject)攻击。 背景 [这很长。跳至“解决方案?”如果您很着急,请参阅下面的部分] 我们的应用程序在访问数据
我正在使用backbone和node.js创建一个网站,并且不认为默认情况下有任何针对CSRF的保护。在使用 Node.js 和 Backbone 时,是否有针对 CSRF 的标准方法?谢谢 最佳答案
我是一名优秀的程序员,十分优秀!