如何识别人类忽略任何请求后发出的GET / POST请求

时间:2013-01-01 21:18:19

标签: c++ http

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

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

你怎么能从标题信息中知道什么意思?

在做了一些研究后,我发现相关的反应来自:

  1. 内容类型:text / html
  2. Html带有一个有意义的标题
  3. status 200 ok

3 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

我认为标题信息不足以从机器人中识别真实用户,因为机器人是模仿真实用户而标题非常容易模仿。

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

一个非常容易实现的检查基于IP源。有黑名单IP地址的数据库,请参阅Project Honeypot - 如果您使用java编写软件,以下是如何检查IP地址的示例:How to query HTTP:BL for spamming IP addresses

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

  1. 检查IP地址是否在HTTP:BL中,如果是用户显示的是html页面,则采取措施将其IP地址列入白名单。这是通过Bad Behavior插件在Wordpress中完成的。
  2. 当用户提交某些内容时,贝叶斯过滤器会验证其提交内容,如果他的评论被识别为垃圾邮件,则会在完成提交之前显示验证码。这是通过akismetconditional captcha完成的,评论也会排队以供人工审批。
  3. 获得一次批准后,同一用户被认为是安全的,并且可以不受限制/检查发布。
  4. 应用上述规则,我在博客上发布了垃圾邮件。我认为类似的逻辑可以用于任何网站。

    这种方法的优点是,大多数用户甚至都没有注意到任何安全机制,因为没有显示验证码,也没有任何异常发生在99%的时间。但是仍然存在相当严格且有效的检查。

答案 2 :(得分:0)

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

因此,当我在浏览器中输入“stackoverflow.com”并按Enter键时,浏览器将发送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
相关问题