如何防止黑客的过度网站访问(疑似屏幕抓取)


How to prevent excessive site visits (suspected screen scraping) from hackers?

我有一个网站,曾经被黑客攻击,有它的数据库被盗。我认为这是通过一个自动化的过程来完成的,它只是通过一系列搜索来访问可见的网站,以"给我所有以AA开头的东西",然后"以AB开头",然后"以AC开头"等等的方式。实际情况比这要复杂一些,但这说明了攻击的原理。我找到了小偷,现在正在采取措施对付他们,但我想防止今后发生更多这样的事情。

我想一定有一些现成的PHP(我使用的)脚本在那里。例如,记录最近(比如)50个访问者的IP地址,并跟踪他们在最近(比如)5分钟内的请求频率。如果他们的请求超过一定的阈值,它将禁止他们(比如)24小时。然而,令我惊讶的是,我在网上找不到这样的类、库或代码示例。

是我错过了一个技巧,还是这里有一个解决方案-就像我想象的那样,或者可能是一个更简单和更有效的保护?

谢谢。

没有灵丹妙药。如果你正试着头脑风暴一些可能的变通方法和解决方案,没有一个是特别容易的,但这里有一些事情要考虑:

  • 大多数屏幕抓取器将使用curl来完成他们的脏工作。这里有一些关于尝试基于User-Agent(或缺乏User-Agent)阻止是否是防止屏幕刮擦的好方法的讨论。最终,如果它有帮助的话,这可能是一个好主意(谷歌这样做是为了防止网站抓取他们的屏幕)。因为User-Agent欺骗是可能的,所以这种措施可以相当容易地克服。

  • 记录用户请求。如果您注意到一个异常值远远超出了用户请求的平均数量(由您决定什么是不可接受的),那么您可以为它们提供一个HTTP 500错误,直到它们恢复到可接受的范围。

  • 检查尝试断开的链接数。如果提供了对损坏链接的请求,则将其添加到日志中。其中一些应该是可以的,但要找到那些正在收集数据的人应该很清楚。如果他们正在寻找AA, AB, AC等。当这种情况发生时,开始为所有页面提供HTTP 500错误一段时间。您可以通过Front Controller来处理所有的页面请求,或者创建一个自定义的404-file not found页面并将请求重定向到那里。404页面可以帮你记录。

  • 在统计数据突然变化时设置错误。这不是要阻止任何人,这只是为了让你去调查。你最不想做的事情就是意外关闭某人,因为对他们来说,这只会让他们觉得网站宕机了。如果您设置了一个脚本,当使用模式突然发生变化但在关闭某人之前向您发送电子邮件时,它可以帮助您适当地调整决策。

这些都是相当广泛的概念,还有很多其他的解决方案或调整可以工作。为了成功地做到这一点,你需要监控你自己的网络模式,以确定一个安全的修复。制定这样一个解决方案不是一件小事(至少不是很好)。

一个警告这一点很重要:安全性总是与可用性相平衡的。如果你做得对,你不会牺牲太多的安全性,你的用户永远不会遇到这些问题。广泛的测试是很重要的,因为网站的性质和停机时间是如此重要,所以在引入新的安全措施之前,要进行广泛的测试。否则,你将面对一群非常不高兴的人,并有可能大量流失用户。最后,屏幕抓取可能是比愤怒的用户更好的处理方法。

另一个警告这可能会干扰你网页的搜索引擎优化,因为像谷歌这样的搜索引擎使用屏幕抓取来保持记录的更新。再一次,关于平衡的注释适用。我相信这里有一个可以解决的问题,但它会偏离原来的问题太远,去研究它。

如果您正在使用Apache,我会查看mod_evasive:

http://www.zdziarski.com/blog/?page_id=442

mod_evasive是Apache提供的一个规避机动模块在HTTP DoS或DDoS攻击或暴力攻击时的规避动作力攻击。它也被设计成一个检测和网络管理工具,并且可以很容易地配置为与ipchains,防火墙,路由器,等等。Mod_evasive目前报告滥用通过电子邮件和syslog功能。

"检测是通过创建内部动态哈希表来执行的IP地址和uri,并拒绝来自任何IP地址的任何单个IP地址如下:

  • 每秒多次请求同一页面
  • 每秒对同一子节点发出超过50个并发请求
  • 在暂时被列入黑名单(在阻止列表上)时发出任何请求"