如何识别由人工发出的GET/POST请求,忽略以下任何请求

How to identify GET/POST requests made by a human ignoring any requests following

本文关键字:请求 POST GET 任何 识别 何识别      更新时间:2023-10-16

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

例如

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

你怎么能从头信息中知道什么是什么意思呢?

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

  1. 的content - type: text/html
  2. Html有一个有意义的标题
  3. 状态200 ok

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

你可能认为用户输入的"cnn.com"转换成"http://www.cnn.com/"可以从协议有效载荷中检测到。答案是否定的,它不能。

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

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

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

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

一个非常容易实现的检查是基于IP源。有黑名单IP地址的数据库,请参阅项目蜜罐-如果你正在用java编写软件,这里有一个关于如何检查IP地址的示例:如何查询HTTP:BL中的垃圾邮件IP地址。

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

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

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

这种方法的优点是,大多数用户甚至没有注意到任何安全机制,因为没有captcha显示,也没有任何不寻常的事情发生在99%的时间。但是,仍然有相当严格和有效的检查在幕后进行。

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

所以当我在浏览器中输入"stackoverflow.com"并按回车键时,浏览器会发送一个GET请求,没有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