3

我正在编写一个应用程序来监听 HTTP 流量并尝试识别哪些请求是由人发起的。

例如:用户在其地址栏中键入cnn.com,这会启动一个请求。然后我想 在丢弃任何其他请求(例如XHR等)的同时找到CNN的服务器响应

你怎么能从标题信息中看出什么是什么?

在做了一些研究之后,我发现相关的回应是:

  1. 内容类型:文本/html
  2. Html 带有一个有意义的标题
  3. 状态 200 正常
4

3 回答 3

1

没有办法从电线上的位来判断。HTTP 协议具有定义的格式,所有(未损坏的)用户代理都遵守该格式。

您可能认为可以从协议有效负载中检测到用户在网络上将“cnn.com”输入到“http://www.cnn.com/”的翻译。答案是否定的,它不能。

要检测允许用户使用这种速记的用户代理,您必须窥探用户代理应用程序(例如浏览器)本身。

实际上,检测非人类代理是一个有趣的问题(垃圾邮件检测是一个明显的动机)。这是因为 HTTP 属于 NVT 协议家族,不管你信不信,其基本思想是人类应该能够在网络终端/控制台程序(例如 telnet 客户端)中“手动”运行协议.) 换句话说,该协议基本上被设计为好像人类正在使用它一样。

于 2013-01-01T21:40:57.783 回答
0

我无法提供任何代码来提供帮助,但我会说看看RefererHTTP 标头。初始GET请求不应该有Referer,但是当您开始加载页面上的资源(例如 JavaScript、CSS 等)时,Referer将设置为请求这些资源的 URL。

因此,当我在浏览器中输入“stackoverflow.com”并回车时,浏览器将发送一个GET带有 no 的请求Referer,如下所示:

GET / HTTP/1.1
Host: stackoverflow.com
# ... other Headers

但是,当浏览器在页面上加载支持的静态资源时,每个请求都会有一个Referer标头,如下所示:

GET /style.css HTTP/1.1
Host: stackoverflow.com
Referer: http://www.stackoverflow.com
# ... other Headers
于 2013-01-01T21:41:01.690 回答
0

我认为标头信息不足以从机器人中识别出真实用户,因为机器人是用来模仿真实用户的,而标头很容易模仿。

您可以做的一件事是跟踪用户所遵循的路径(点击序列),这很可能与机器人制作的路径不同,并对发布的信息进行一些分析(即贝叶斯过滤器)。

一个非常容易实施的检查是基于 IP 源。有黑名单 IP 地址的数据库,请参阅Project Honeypot - 如果您正在用 Java 编写软件,这里有一个如何检查 IP 地址的示例:如何查询 HTTP:BL 的垃圾邮件 IP 地址

我在我的博客上做的是这个(使用 wordpress 插件):

  1. 检查 IP 地址是否在 HTTP:BL 中,如果是,则向用户显示 html 页面以采取措施将其 IP 地址列入白名单。这是通过Bad Behavior插件在 Wordpress 中完成的。
  2. 当用户提交一些内容时,贝叶斯过滤器会验证他提交的内容,如果他的评论被识别为垃圾邮件,则会在完成提交之前显示验证码。这是通过akismet条件验证码完成的,并且评论也排队等待手动批准。
  3. 被批准一次后,同一用户被认为是安全的,并且可以不受限制/检查地发布。

应用上述规则,我的博客上不再有垃圾邮件。我认为类似的逻辑可以用于任何网站。

这种方法的优势在于,大多数用户甚至都不会注意到任何安全机制,因为 99% 的时间都不会显示验证码,也不会发生任何异常情况。但仍然有相当严格和有效的检查在幕后进行。

于 2013-01-01T21:39:07.283 回答