近期学习了淘宝的UA生成文件actionlog_js_ua.js(以下简称ua.js),该文件是2015年10月底抓取的,目前新版本的淘宝登录时UA还在,但是我还没有找到类似的文件。因为本人js基础差,所以这里谈一谈个人对ua.js文件非常粗浅的分析:
1.ua.js有一个名为UA_opt的数组,该数组值决定着UA更新的参与的事件与信息类型。但是ua.js文件中只是从该变量中取值,所以我怀疑该变量来源于当前访问页面或者其他js文件。
2.当前访问页面DOM加载完成时,UA文件会获取如下信息,依次用于更新UA。
2.1 记录当前浏览器是否开启调试功能的标志和指向文件最外层匿名函数的指针
2.2 Ua文件调用的时间
2.3 浏览器名称,浏览器主版本号,运行浏览器的操作系统类型
2.4 UA_opt[‘TokenStr’]
2.5 当前访问页面的URL和referer
2.6 用户屏幕分辨率,浏览器窗口尺寸
2.7 JSocket.getos()和JSocket.getversion()
2.8 document.JSocket.getlso()和调用getlso的时间
在获取上述信息时,相邻两个信息之间都会进行网络超时检测,若相邻两个信息获取时间间隔大于5s,那么程序就会抛出异常。
3.当访问页面中有鼠标(mousemove,mousedown,focus,blur)或键盘事件(keydown)发生时,获取当前事件发生的元素ID,当前鼠标时间发生的坐标,鼠标键(左中右?),键盘键值等信息用于更新UA。其中mousemove会有一定处理周期,例如N次mousemove事件更新一次UA(N由UA_opt决定),其他事件每一次发生时都会更新UA。
4.根据UA_opt的设定,ua.js会定时或定量的通过image对象将UA相关信息回传给服务器,其中部分代码如下:
ytq = function (sb81, d) {
var sb = new Image();
var embn = (new or["Date"]())["getTime"]() + upc["Math"]["random"]();
upc[embn] = sb;
sb["onload"] = sb["onerror"] = function () {
upc[embn] = null;
};
sb["src"] = sb81 + upc["encodeURIComponent"](d);
sb = null;
};
5.在UA获取过程中,或检查函数的调用逻辑,若调用不合理,程序也会抛出异常。
关于actionlog_js_ua.js更详细的分析和更多的源代码,大家可以参考actionlog_js_ua.js混淆编程形式与执行主流程
现在问题是,在目前新版本的淘宝中,我不仅找不到ua文件,也找不到UA_opt数组,而以前还没有学习该文件时,我有没有注意过登录页面是否包含UA_opt数组,不过以UA_opt为关键词进行搜索,倒是能找到一些相关的代码。
我想请教大家:1.大家是否有在淘宝的某个页面发现过UA_opt? 2.现在新版的淘宝登录界面中,类似以前的actionlog_js_ua.js文件现在的名字是什么?它又隐藏在哪里呢?
非常感谢各位的建议和回答!
天蓬老师2017-04-11 09:21:06
首先,由衷佩服题主这种精神,还专门开博记录,大赞一个!!!
然后,看题主提供的内容,其实没明白那个文件是干嘛的。个人猜测是日志记录,统计用户侧信息的一个东东。
最后,我虽然也看过淘宝的源码,但是没有注意那个你说的UA_opt变量,刚刚也控制台打印了一下,没有(至少说不是全局的变量,但是从题主提供的文件看应该是全局变量,因为那个文件里面没有搜索到变量定义的地方)。
ps:感觉,题主js基础不算差!