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