确定机器人是否正在刮取水电费帐单内容以及如何封锁它

我为一个地方政府工作,这个地方政府为用水量和垃圾收集费用。 我今天接到一位客户的电话,一位“纽约公司”打电话给他,询问他的客户号码和密码,让他们访问他的在线帐户,以便他们可以从该网站“刮”他的用水量。 他们显然是从几个公寓收集这些信息,因为某些他不记得的原因。 当然,这引起了我的标志,我告诉他不要给他们这个信息。 我还告诉他,如果他们打电话告诉这家公司,他们可以直接与我们联系,以获取这些信息。

现在,如果我们的一个客户接到一个电话,我觉得可以肯定的是,其他人已经得到相同或类似的电话,他们可能会或可能不会提供这些信息。 我怎样才能查看我们的日志,看看是否有一个机器人点击我们的网站和屏幕上的数据? 我也觉得我们应该阻止这个机器人,并阻止进一步的尝试。

注意:Web服务器上存储的唯一信息是客户的名称和地址,用水量以及总额到期的账单成本。 他们也可以付账。 我们不会在线存储任何帐户信息。 总的来说,networking服务器上的信息可以被视为公共信息(虽然是正确的渠道)。

没有办法检测或阻止一个写得很好的机器人只能抓取less量的页面 – 它的行为可能与真正的用户无法区分。

  1. 您可以阻止或限制访问多个帐户的任何单个来源IP。 如上所述,这将必须能够知道多于帐户被访问,并且可能不是微不足道的实现。 当然,这也可能会阻止一个公寓中的租户将NAT作为“公用事业”。

  2. 你可以实现一个CAPTCHA。

如果有一个机器人屏幕抓取您的网站,那么您唯一的迹象就是在您的networking服务器日志中,这将是困难的(最好)检测。 通常,您在日志中看到漫游器的方式是通过用户代理string,但实际上只适用于search爬虫等行为良好的漫游器。 所有其他的nasties将设置用户代理string来匹配一些常见的主要浏览器,以隐藏自己。

最有可能的是你在追踪访问特定URL的IP地址,你可以直接绑定到特定的客户。 如果请求是POST请求,这会变得更加复杂,因为客户特定的信息可能在POST数据中,而不是像GET请求中所见的URL那样。

老实说,不幸的是,不幸的是…不知道你会得到很远。

如果他们是屏幕抓取,他们可能只访问目标页面没有任何相关的内容,如CSS,JSP和图像。 您将需要search您的访问日志,看看是否发生这种活动。 您可能会捕获一些不会重新加载已经caching的数据的合法浏览器。

您可能能够从单个IP地址检测到对该页面的过多访问。 这可能会吸引一些正在使其客户访问的ISP。

运行GeoIP检查应该很快告诉你是否有来自其他国家的访问。 其中一些可能是居住在国外或旅行的合法客户。

如果您的网站具有“新闻”function,则可能需要提交有关此情况的信息。 这可能会给你更多的报告。

logging每个访问帐户的IP。 过了一段时间后,回去查询您的日志,为每个访问的帐户分配一个指向每个IP的日志,然后进行sorting以查找访问大多数帐户的IP地址。

在排除了一些图书馆之后,我打赌你会发现你的罪魁祸首,即使他们很慢或很less访问帐户。 如果他们在同一个地方做这个,那么他们在一个月后就会突然冒出来 – 他们更可能是这样做的。

其他一些排列:首先限制从多个IP访问的帐户 – 真实用户和刮板。 查找任何一个知道发布信息的用户的帐户。

如果您有一个IP访问多个帐户,您能不能标记和放慢(速率限制)和/或阻止机器人? 当然,多个真实用户可以共享一个IP地址(比如在一个办公室),但是使用这个服务和同一个IP的上百人的可能性是多less呢? 机器人也可能每次都有相同的用户代理(取决于他们的编程)。

取决于您如何获得有关信息,您可以隐藏屏幕上的数据或web表单。 像大多数机器人不处理JavaScript,所以你可以使用它来修改提交数据。

你可以在login页面实现一些JavaScript。 当页面加载时,将表单动作设置为这样的http://mydomain.ltd/login/bot ,当用户点击提交(login)button,然后将操作更改为有效的url或document.getElementById('login_form_id').action = "http://mydomain.ltd/login/human"

如果bot抓取您的数据,那么通常bot不支持JS。 当然,他们会弄清楚,为什么bot不工作。 但是,您可以logging失败的IP地址,然后再与成功login的地址进行比较。

如果人类正在收集数据,那么很难弄清楚。

你也可以分析用户代理string和IP地址。 如果用户注销,然后login到另一个帐户(5分钟?),那么你可以logging。 如果这是人类,他们会看一个帐户,然后另一个等…

这很臭,但是我过去打过简单的屏幕刮板的方式是使用silverlight或flash将文本作为图像而不是文本显示在屏幕上。 至less在那个时候,他们必须对图像进行OCR,而不是简单地捕获HTML输出并parsing它。