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

时间:2014-06-21 20:22:17

标签: php security screen screen-scraping

我有一个网站遭到黑客入侵,导致其数据库被盗。我认为这是通过一个自动化流程来完成的,该流程只是通过一系列搜索访问可见网站,其风格是“给我所有的东西以AA'然后'与AB'然后' AC'等等。现实比这更复杂,但这说明了攻击的原理。我找到了小偷,现在我正在采取措施对付他们,但我希望将来能更好地阻止它。

我认为必须有一些现成的PHP(我使用的)脚本。例如,记录最后(比方说)50个访问者的IP地址的东西,并跟踪他们在最后(比如说)5分钟内的请求频率。如果超过一定的请求阈值,它会禁止(例如)24小时。但令我惊讶的是,我无法在网上任何地方找到用于此目的的类,库或代码示例。

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

感谢。

2 个答案:

答案 0 :(得分:3)

没有银子弹。如果你试图集体讨论一些可能的解决方法和解决方案,那么没有一个特别容易,但这里有一些事情需要考虑:

  • 大多数屏幕抓取工具都会使用curl进行肮脏的工作。关于是否尝试基于用户代理(或缺少用户代理)阻止是否是防止屏幕擦除的好方法,有一些讨论,如here。最终,如果它有所帮助,那可能是一个好主意(而Google也是这样做的,以防止网站屏幕抓取它们)。由于用户代理欺骗是可能的,因此可以相当容易地克服这一措施。

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

  • 检查尝试的断开链接数。如果提供了对损坏链接的请求,请将其添加到日志中。其中一些应该没问题,但是找到一个正在捕获数据的人应该很清楚。如果他们正在寻找AA,AB,AC等。当发生这种情况时,开始在一段时间内为所有页面提供HTTP 500错误。您可以通过Front Controller提供所有页面请求,或者创建自定义404文件未找到页面并在那里重定向请求来完成此操作。 404页面可以为您记录它们。

  • 统计数据突然发生变化时设置错误。这不是为了让任何人失望,这只是为了让你去调查。你要做的最后一件事就是不小心关闭某人,因为对他们而言,网站似乎已经关闭了。如果您设置了一个脚本,当使用模式发生突然变化但在关闭某人之前向您发送电子邮件,则可以帮助您适当调整您的决策。

这些都是相当广泛的概念,并且有很多其他解决方案或调整可以起作用。为了成功完成,您需要监控自己的Web模式以确定安全修复。制作这样的解决方案并不是一件小事(至少不是很好)。

警告 这很重要:安全性总是会被可用性所抵消。如果你做得对,你不会牺牲太多的安全性,你的用户永远不会遇到这些问题。广泛的测试将非常重要,并且由于网站的性质和停机时间非常重要,因此无论何时引入新的安全措施,在进行实施之前都要进行大量测试。否则,你将有一群非常不开心的人要处理,并可能导致用户大量流失。最后,屏幕抓取可能比愤怒的用户更好。

另一个警告 这可能会干扰您的网页的搜索引擎优化,因为像谷歌这样的搜索引擎使用屏幕抓取来保持记录的最新状态。同样,关于平衡的说明适用。我确信这里有一个可以解决的问题,但它会偏离原始问题而过于深入研究。

答案 1 :(得分:2)

如果你正在使用Apache,我会调查mod_evasive

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

  

mod_evasive是Apache提供的回避操作模块   发生HTTP DoS或DDoS攻击或暴力攻击时的回避行为   强迫进攻。它还被设计为检测和网络   管理工具,可以轻松配置与ipchains通信,   防火墙,路由器等。 mod_evasive目前报告滥用情况   通过电子邮件和系统日志设施。

...

“通过创建内部动态哈希表来执行检测 IP地址和URI,并拒绝任何一个IP地址 以下内容:

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