Anehta — 打造一个Browser Sniffer 's

admin 2017年4月30日18:38:13评论234 views字数 2766阅读9分13秒阅读模式
摘要

作者:刺0.5.6 中加入了对BrowserSniffer的支持。一般简单的判断客户端浏览器类型的方法,都是读取客户端的userAgent ,

作者:

0.5.6 中加入了对BrowserSniffer的支持。

一般简单的判断客户端浏览器类型的方法,都是读取客户端的userAgent

比如 navigator.appVersionnavigator.userAgent

然后从UA信息中,取出浏览器版本和操作系统版本进行判断。

比如我的userAgent 信息大致是这样的:

Anehta — 打造一个Browser Sniffer  's
在jQuery 中的就是这么判断浏览器版本的。

但是userAgent 的信息是可以伪造的,甚至有很多工具可以让用户直接修改UA信息,这样通过获取UserAgent来判断浏览器就不再准确了。
Anehta — 打造一个Browser Sniffer  's
Anehta 对客户端浏览器的判断要求比较高,所以在这里采用了Browser Sniffer技术。

其实就是通过各个浏览器的一些DOM对象或者是方法之间的差异,进而判断出准确的浏览器版本。

在 anehta.detect.browser() 函数中实现如下过程:
anehta.detect.browser = function (){
var userAgent = navigator.userAgent.toLowerCase();

return {
type : function(){
/* 独立于jQuery实现
//$.browser.msie/safari/opera/mozilla
if($.browser.msie){ return “msie”;}
else if($.browser.mozilla){return “mozilla”;}
else if($.browser.opera){return “opera”;}
else if($.browser.safari){return “safari”;}
else {return “unknown”;}
*/
//alert(navigator.userAgent);

// 通过一些dom对象判断浏览器指纹 ie,ie7,ie8,ff2,ff3,safari,opera,chrome,maxthon,theworld,360se….
//if (typeof document.all != “undefined”){ // msie ; firefox 在 quirks mode下也支持
if (window.ActiveXObject){
anehtaCache.setItem(“BrowserSniffer”, “MSIE 6.0 or below”);

// 判断是否是IE7以上
if (document.documentElement && typeof document.documentElement.style.maxHeight!=”undefined” ){

// 判断是否是 IE8+
if ( typeof document.adoptNode != “undefined”) { // Safari3 & FF & Opera & Chrome & IE8
anehtaCache.setItem(“BrowserSniffer”, “MSIE8.0”);
}
// 因为是精确判断,所以改写cache
anehtaCache.setItem(“BrowserSniffer”, “MSIE7.0”);
}

// 不可靠的判断一些浏览器
if (userAgent.indexOf(“maxthon”) > -1){
anehtaCache.appendItem(“BrowserSniffer”, ” | “+”maybe maxthon”);
}
if (userAgent.indexOf(“360se”) > -1){
anehtaCache.appendItem(“BrowserSniffer”, ” | “+”maybe 360se”);
}
if (userAgent.indexOf(“theworld”) > -1) {
anehtaCache.appendItem(“BrowserSniffer”, ” | “+”maybe theworld”);
}
/*
if (userAgent.indexOf(“”) > -1) {
//anehtaCache.appendItem(“BrowserSniffer”, ” | “+”maybe greenbrowser”);
}
*/

return “msie”;
}
else if (typeof window.opera != “undefined”) { //opera独占
anehtaCache.setItem(“BrowserSniffer”, “Opera “+window.opera.version());
return “opera”;
}
else if (typeof window.netscape != “undefined”) { // mozilla 独占
anehtaCache.setItem(“BrowserSniffer”, “Mozilla”);
// 可以准确识别
if (typeof window.Iterator != “undefined”) {
anehtaCache.setItem(“BrowserSniffer”, “Firefox 2“);

if (typeof document.styleSheetSets != “undefined”) { // Firefox 3 & Opera 9
anehtaCache.setItem(“BrowserSniffer”, “Firefox 3”);
}
}
return “mozilla”;
}
else if (typeof window.pageXOffset != “undefined”) { // mozilla & safari
anehtaCache.setItem(“BrowserSniffer”, “Safari”);
try{
if (typeof external.AddSearchProvider != “undefined”) { // firefox & google chrome
anehtaCache.setItem(“BrowserSniffer”, “Google Chrome”);
return “chrome”;
}
} catch (e) {
return “safari”;
}
}
else { //unknown
anehtaCache.setItem(“BrowserSniffer”, “Unknown << “+userAgent+” >>”);
return “unknown”;
}
},

// 从userAgent里取出来的不可靠
version : function(){
//return $.browser.version;
return (userAgent.match( /.+(?:rv|it|ra|ie|me)[//: ]([/d.]+)/ ) || [])[1];
}
};
};

最终准确的判断 结果保存在了cache中的 “BrowserSniffer” 字段里,所以如果XSS抓回来的UserAgent 信息和 BrowserSniffer 信息不一致,就可以知道,UA已经被伪造过了!

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2017年4月30日18:38:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Anehta — 打造一个Browser Sniffer 'shttps://cn-sec.com/archives/45778.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息