User-Agent相关

user-agent简称UA,在某些情况下会作为同一发起来源的其中一个标志,小哲的test404目录爆破工具就支持随机UA,此次的目的是想了解一下UA的普遍规则,以便写出一个能够自动生成伪造UA的程序。

于是先去搜集关于UA标准的信息,目前所能发现的除了RFC标准以外,就是英文维基百科了,另外我还参照了MSDN上的相关信息
维基百科给出的样例如下:

Mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]

(至于为何是Mozilla开头的,根据维基百科所述,在第一次浏览器大战时,许多网页的高级功能只提供给被识别为Mozilla的客户端使用,因此许多浏览器只好将UA头部改为Mozilla,延续至今。)
而在微软MSDN上则有在基于其IE浏览器对其中的 ([system and browser information]) 这块进行了解释,不过根据根据该页面所示,IE11开始,其UA有了变化,详见该链接.aspx “该链接”)。

其实通过收集目前市面上的user-agent可以发现,并不是所有浏览器的User-Agent都遵守上面的标准,比如你会发现QQ浏览器的UA可能居然长这样:

MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ2

而部分欧鹏浏览器则是以如Opera/9.80这样开头的,并非Mozilla,不过大多数浏览器的UA不是这样特立独行的。
基本上IE浏览器的浏览器内核信息写在 ([system and browser information]) 一项,而其他浏览器则选择将其记录在 [platform]
其实对于

  • ([system and browser information])
  • [platform]
  • ([platform details])
  • [extensions]

这些,是没有特定的编写标准的,各家不同的服务具体编写标准不同,内容不同,根据服务需要编写,作为一个来源的特征来判别应该为该浏览器发起的请求提供怎样的响应。


大体的规则:[platform]一项的内容由分号进行分隔,[extensions]一项的内容由空格进行分割。
[platform]一般会包含系统类型、浏览器版本、加密程度、系统版本、浏览器内核版本、浏览器修订版本、用户语言、拓展其中的一个或多个字段,此处拓展一般包含的是由该浏览器开发得到的“修改版浏览器”的特征字符串,比如360浏览器的“360SE”,QQ浏览器的“TencentTraveler 4.0”,世界之窗的“The World”。
[extensions]一般则包含特定的拓展功能,维基百科对此举了一个例子
“Mobile/7B405 : This is used by the browser to indicate specific enhancements that are available directly in the browser or through third parties.An example of this is Microsoft Live Meeting which registers an extension so that the Live Meeting service knows if the software is already installed, which means it can provide a streamlined experience to joining meetings.”

本次实验使用了一个Excel表格作为辅助理解。见附录。
基于对User-Agent普遍规则的理解,我们此次希望创建一个php程序以实现批量输出可用的伪造的UA。

参考链接:
https://en.wikipedia.org/wiki/User_agent
https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/ms537503(v=VS.85).aspx
https://tools.ietf.org/html/rfc7231#page-46

附录:
User-Agent.xlsx