提问人: 提问时间:8/4/2008 最后编辑:Unnikrishnan R 更新时间:10/19/2017 访问量:9431
捕获 SQL 注入和其他恶意 Web 请求
Catching SQL Injection and other Malicious Web Requests
问:
我正在寻找一种可以检测恶意请求(例如明显的 SQL 注入获取或发布)的工具,并会立即禁止请求者的 IP 地址/添加到黑名单中。我知道,在理想情况下,我们的代码应该能够处理此类请求并相应地处理它们,但是即使站点免受此类攻击,这样的工具也有很多价值,因为它可以节省带宽,防止分析膨胀等。
理想情况下,我正在寻找一个比技术堆栈更高级别的跨平台 () 解决方案;也许在 Web 服务器或硬件级别。不过,我不确定这是否存在。LAMP/.NET
无论哪种方式,我都希望听到社区的反馈,以便我了解在实施和方法方面可能有哪些选择。
答:
通用工具的问题在于,很难提出一套只能与真正的攻击相匹配的规则。
SQL关键字都是英文单词,别忘了字符串
DROP TABLE users;
在表单字段中完全有效,例如,包含编程问题的答案。
唯一明智的选择是在将输入传递到数据库之前对其进行清理,但仍然会传递它。否则,许多完全正常的非恶意用户将被禁止访问您的网站。
一种可能适用于某些情况的方法是获取 sql 字符串,如果您天真地使用表单数据,它将运行,并将其传递给一些代码,该代码计算实际执行的语句数。如果它大于预期的数字,则很有可能尝试注入,特别是对于不太可能包含控制字符(如用户名)的字段。
像普通文本框这样的东西会有点困难,因为这种方法更有可能返回误报,但这至少是一个开始。
要记住的一件小事:在某些国家(即欧洲大部分地区),人们没有静态 IP 地址,因此黑名单不应该永远存在。
现在我想到了,类似于用于阻止垃圾邮件的贝叶斯过滤器也可能工作得很好。如果您为每个字段收集了一组普通文本和一组 sql 注入,则可以训练它来标记注入攻击。
您几乎以错误的方式看待它,没有不知道您的应用程序方法/命名/数据/域的第三方工具将能够完美地保护您。
像 SQL 注入预防这样的东西必须包含在代码中,最好由编写 SQL 的人编写,因为他们知道这些字段中应该/不应该包含什么(除非您的项目有非常好的文档)
你的权利,这一切都已经做过了。你不必重新发明轮子,但你确实必须雕刻一个新的轮子,因为每个人的车轴直径都不同。
这不是一个插入和运行的问题,在防止它之前,您确实必须熟悉SQL注入到底是什么。这是一个偷偷摸摸的问题,所以它需要同样偷偷摸摸的保护。
这 2 个链接教会了我更多的东西,而不是关于这个主题的基础知识,并帮助我更好地表达我未来对未回答的特定问题的查找。
虽然这个不是 100% 的发现器,但它会“向你展示”现有代码中存在的问题,但就像 Web 标准一样,一旦你通过了这个测试,就不要停止编码。
Oracle 有一个关于 SQL 注入的在线教程。即使你想要一个现成的解决方案,这可能会给你一些关于如何更好地使用它来保护自己的提示。
我的一个网站最近通过SQL注入被黑客入侵。它为数据库中的每个文本字段添加了一个指向病毒的链接!解决方法是添加一些查找 SQL 关键字的代码。幸运的是,我已经在ColdFiusion中开发了,因此代码位于我的Application.cfm文件中,该文件在每个网页的开头运行,并查看所有URL变量。维基百科也有一些很好的链接可以提供帮助。
有趣的是,几年后谷歌是如何实现的,他们一起删除了 URL,以防止 XSS 攻击和其他恶意行为
评论