查看: 8385|回复: 29
收起左侧

[意见] 风险提示,关于坛子上的QQ统计

  [复制链接]
fcerebel
发表于 2011-6-19 02:18:13 | 显示全部楼层 |阅读模式
本帖最后由 fcerebel 于 2011-6-20 18:55 编辑

半夜睡不着,就上一会网
打开卡饭的一个页面,突然...........

无命名.jpg

诶,这不是宽带公司的页面劫持广告吗?几个月前,宽带公司的客服已经清清楚楚地表示会禁止向我的宽带投放这类广告的。

反正先看页面源代码,结论是没有发现可以联系到宽带公司的内容


接下来,再看页面中的媒体

2.PNG

原来是QQ互联诶

那啥

我没加入QQ互联
我也不愿意使用QQ互联

我甚至屏蔽了检查是否follow疼讯官方微博帐号的脚本

疼讯你居然还要向我推送信息

我说,
可以给希望使用QQ互联的人提供该功能,对于那些不希望使用的人,必须由你给出关闭/禁用选项,而不是我们被动地筛选、删除

----------------------------------------------------------------------------------

接下来,发现这个信息推送功能应该是基于以下分析的统计脚本,所以,无论弹不弹出窗口,只要你访问了kafan.cn,这个统计脚本一定是有的,只是你看不见/没注意而已


----------------------------------------------------------------------------------
然后看了一下noscript,发现有个来自qq的脚本
3.PNG


看到了吧:
疼讯分析

网站统计

好了,从此以后,不管你有没有加入qq互联,你在卡饭的一举一动,疼讯都知道


脚本地址
http://tcss.qq.com/ping.js

以下是脚本:

这个脚本的换行符有些问题,所以用http://jsbeautifier.org/分了下行,可以大致看清楚
我不懂javascript,所以这里只能给出一些"一眼就能看出来的"分析


目前为止,这个脚本的功能,似乎和其它第三方统计没有明显的不同,它似乎仅用于discuz论坛


关于第三方统计,请查看我在http://bbs.kafan.cn/thread-934196-1-1.html的介绍


但是,这里是一个论坛,和一般网页不同,你上新浪看新闻的时候,是匿名的,新浪只能不可追溯地知道你是谁:它可以知道你大概是住在宣武区的网通用户,白天会到中关村上班,上班的公司是在用电信的线路,它能知道你每天什么时候看新闻,对哪些新闻感兴趣。


你上卡饭的时候,你是用卡饭/qq帐号登录的,就有一个固定身份可追寻了

腾讯知道你的kafan账户(以及其它DZ论坛账户),你的腾讯微博账户(自然包括qq账户),以及你与qq好友之间的关系等信息之间的关联
而在国内,知道了这些,基本上就相当于知道你是谁了


这是最大风险,一切都在腾讯的投影之下

也许你需要考虑一下,使用这个可能是不必要的内容,你承担得了其中的风险吗?

反之,现在你手头有各种现成的工具,从XX卫士到浏览器插件到本地DNS劫持,你可以很简单、不用付出什么代价就能把它请出你的电脑。


还有一个猜测:
腾讯可能是这几天在测试discuz统计功能



另一方面,潜在地,这个脚本同样可以用于推送精确广告
  1. (function () {
  2.     var _d, _l, _b, _n = "-",
  3.         _params, _curDomain, _curUrl, _domainToSet, _refDomain, _refUrl, _image;
  4.     var _v = 0;
  5.     if (typeof (_rep) == "undefined") {
  6.         var _rep = 1
  7.     }
  8.     function tcss(params) {
  9.         this.url = [];
  10.         this.init(params)
  11.     }
  12.     tcss.prototype = {
  13.         init: function (params) {
  14.             params ? _params = params : _params = {};
  15.             _d = document;
  16.             if (!(_params.statIframe)) {
  17.                 if (window != top) {
  18.                     try {
  19.                         _d = top.document
  20.                     } catch (e) {}
  21.                 }
  22.             }
  23.             _l = _d.location;
  24.             _b = _d.body
  25.         },
  26.         getInterfaceInfo: function () {
  27.             var _dP = "";
  28.             if (_params.discuzParams) {
  29.                 if (_params.discuzParams.ui) {
  30.                     _dP += "&ui=" + _params.discuzParams.ui
  31.                 } else {
  32.                     _dP += "&ui=0"
  33.                 }
  34.                 if (_params.discuzParams.ty) {
  35.                     _dP += "&ty=" + _params.discuzParams.ty
  36.                 } else {
  37.                     _dP += "&ty=" + _v
  38.                 }
  39.                 if (_params.discuzParams.fi) {
  40.                     _dP += "&fi=" + _params.discuzParams.fi
  41.                 }
  42.                 if (_params.discuzParams.gi) {
  43.                     _dP += "&gi=" + _params.discuzParams.gi
  44.                 }
  45.                 if (_params.discuzParams.ti) {
  46.                     _dP += "&ti=" + _params.discuzParams.ti
  47.                 }
  48.                 if (_params.discuzParams.pi) {
  49.                     _dP += "&pi=" + _params.discuzParams.pi
  50.                 }
  51.                 if (_params.discuzParams.rt) {
  52.                     _dP += "&rt=" + _params.discuzParams.rt
  53.                 }
  54.                 if (_params.discuzParams.md) {
  55.                     _dP += "&md=" + _params.discuzParams.md
  56.                 }
  57.                 if (_params.discuzParams.nt) {
  58.                     _dP += "&nt=" + _params.discuzParams.nt
  59.                 }
  60.                 if (_params.discuzParams.pn) {
  61.                     _dP += "&pn=" + _params.discuzParams.np
  62.                 }
  63.                 if (_params.discuzParams.qq) {
  64.                     _dP += "&qq=" + _params.discuzParams.qq
  65.                 }
  66.                 if (_params.discuzParams.on) {
  67.                     _dP += "&on=" + _params.discuzParams.on
  68.                 }
  69.                 if (_params.discuzParams.r2) {
  70.                     _dP += "&r2=" + _params.discuzParams.r2
  71.                 }
  72.                 if (_params.discuzParams.logo) {
  73.                     this.ctrlLogo(_params.discuzParams.logo)
  74.                 }
  75.             }
  76.             return _dP
  77.         },

  78. # 首先,这个家伙是用来统计的
  79.         ctrlLogo: function (c_params) {
  80.             var src, style, swi = c_params ? c_params : 1;
  81.             switch (swi) {
  82.             case 0:
  83.                 break;
  84.             case 9:
  85.                 src = "腾讯分析";
  86.                 style = "word";
  87.                 break;
  88.             case 10:
  89.                 src = "网站统计";
  90.                 style = "word";
  91.                 break;
  92.             default:
  93.                 src = "http://tcss.qq.com/icon/toss_" + swi + ".gif";
  94.                 style = "pic";
  95.                 break
  96.             }
  97.             this.creatLogo(style, src)
  98.         },
  99.         creatLogo: function (style, src) {
  100.             var child, sonChild, phParent = document.getElementById("tcss").parentNode;
  101.             child = document.createElement("a");
  102.             child.href = "http://stats.discuz.qq.com";
  103.             child.title = "腾讯分析";
  104.             child.target = "_blank";
  105.             switch (style) {
  106.             case "word":
  107.                 var text = document.createTextNode(src);
  108.                 child.appendChild(text);
  109.                 break;
  110.             case "pic":
  111.                 sonChild = document.createElement("img");
  112.                 sonChild.title = "腾讯分析";
  113.                 sonChild.src = src;
  114.                 sonChild.border = 0;
  115.                 child.appendChild(sonChild);
  116.                 break;
  117.             default:
  118.                 break
  119.             }
  120.             phParent.replaceChild(child, document.getElementById("tcss"))
  121.         },
  122.         run: function () {
  123.             if (_cookie.get("pgv_pvi=", true) == _n) {
  124.                 _v = 1
  125.             }
  126.             _cookie.init();
  127.             this.url.push(this.getDomainInfo());
  128.             this.url.unshift("http://pingtcss.qq.com/pingd?");
  129.             this.url.push(this.getRefInfo(_params));

  130. #先设置一个cookie,以后疼讯就记住你是谁了

  131.             try {
  132.                 if (navigator.cookieEnabled) {
  133.                     this.url.push("&pvi=" + _cookie.setCookie("pgv_pvi", true))
  134.                 } else {
  135.                     this.url.push("&pvi=NoCookie")
  136.                 }
  137.             } catch (e) {
  138.                 this.url.push("&pvi=NoCookie")
  139.             }
  140.             this.url.push("&si=" + _cookie.setCookie("ssi"));
  141.             this.url.push(this.getInterfaceInfo());
  142.             this.url.push(this.getMainEnvInfo());
  143.             this.url.push(this.getExtendEnvInfo());
  144.             if (_params.userDefineVariable) {
  145.                 this.url.push(_udv.setv(_params.userDefineVariable))
  146.             }
  147.             _cookie.save();
  148.             if (_params.originalReferer) {
  149.                 this.url.push("&or=" + _params.originalReferer)
  150.             }
  151.             if (_params.extraParams) {
  152.                 this.url.push("&ext=" + _params.extraParams)
  153.             }
  154.             this.sendInfo(this.url.join(""));
  155.             if (_params.hot) {
  156.                 if (document.attachEvent) {
  157.                     document.attachEvent("onclick", function (event) {
  158.                         pgvWatchClick(event)
  159.                     })
  160.                 } else {
  161.                     document.addEventListener("click", function (event) {
  162.                         pgvWatchClick(event)
  163.                     }, false)
  164.                 }
  165.             }
  166.             if (_params.repeatApplay && _params.repeatApplay == "true") {
  167.                 if (typeof (_rep) != "undefined") {
  168.                     _rep = 1
  169.                 }
  170.             }
  171.         },

  172. #记录你在访问哪个网站

  173.         getDomainInfo: function (hot) {
  174.             var dm, url;
  175.             _curDomain = dm = _params.virtualDomain || _l.host;
  176.             dm = _curDomain.toLowerCase();
  177.             if (!_domainToSet) {
  178.                 _domainToSet = this.getCookieSetDomain()
  179.             }
  180.             if (hot) {
  181.                 var pl = dm.indexOf(":");
  182.                 if (pl > -1) {
  183.                     dm = dm.substr(0, pl) + ".hot" + dm.substr(pl)
  184.                 } else {
  185.                     dm += ".hot"
  186.                 }
  187.             }
  188.             url = this.getCurrentUrl();
  189.             return ("dm=" + dm + "&url=" + url)
  190.         },
  191.         getCurrentUrl: function () {
  192.             var url = "";
  193.             var arg = _n;
  194.             if (_params.virtualURL) {
  195.                 url = _params.virtualURL
  196.             } else {
  197.                 url = _curUrl = escape(_l.pathname);
  198.                 if (_l.search != "") {
  199.                     arg = escape(_l.search.substr(1))
  200.                 }
  201.                 if (_params.senseParam) {
  202.                     var value = this.getParameter(_params.senseParam, _d.URL);
  203.                     if (value) {
  204.                         url += "_" + value
  205.                     }
  206.                 }
  207.             }
  208.             return url + "&arg=" + arg
  209.         },
  210.         getRefInfo: function (params) {
  211.             var refdm = _n,
  212.                 refurl = _n,
  213.                 refarg = _n,
  214.                 refStr = _d.referrer,
  215.                 tagParamName, adtag, pos;
  216.             var ADTAG = _n;
  217.             var virtualDomain = params.virtualDomain ? params.virtualDomain : _n;
  218.             var virtualURL = params.virtualURL ? params.virtualURL : _n;
  219.             _refDomain = params.virtualRefDomain ? params.virtualRefDomain : "";
  220.             _refUrl = params.virtualRefURL ? params.virtualRefURL : "";
  221.             tagParamName = params.tagParamName || "ADTAG";
  222.             adtag = this.getParameter(tagParamName, _d.URL);
  223.             if (adtag) {
  224.                 ADTAG = adtag
  225.             }
  226.             pos = refStr.indexOf("://");
  227.             if (pos > -1) {
  228.                 var re = /(\w+):\/\/([^\:|\/]+)(\:\d*)?(.*\/)([^#|\?|\n]+)?(#.*)?(\?.*)?/i;
  229.                 var arr = refStr.match(re);
  230.                 if (arr) {
  231.                     refdm = arr[2];
  232.                     refurl = arr[4] + arr[5]
  233.                 }
  234.             }
  235.             if (refStr.indexOf("?") != -1) {
  236.                 var pos = refStr.indexOf("?") + 1;
  237.                 refarg = refStr.substr(pos)
  238.             }
  239.             if (_refDomain != "" && params.useCookie == "false") {
  240.                 refdm = _refDomain
  241.             }
  242.             if (_refUrl != "" && params.useCookie == "false") {
  243.                 refurl = _refUrl
  244.             }
  245.             _refDomain = refdm;
  246.             _refUrl = escape(refurl);
  247.             return ("&rdm=" + _refDomain + "&rurl=" + _refUrl + "&adt=" + ADTAG + "&rarg=" + escape(refarg))
  248.         },

  249. #你的浏览器的各项(公开)设置

  250.         getMainEnvInfo: function () {
  251.             var ret = "";
  252.             try {
  253.                 var scr = _n,
  254.                     scl = _n,
  255.                     lang = _n,
  256.                     cpuc = _n,
  257.                     pf = _n,
  258.                     tz = _n,
  259.                     java = 0,
  260.                     n = navigator;
  261.                 if (self.screen) {
  262.                     scr = screen.width + "x" + screen.height;
  263.                     scl = screen.colorDepth + "-bit"
  264.                 }
  265.                 if (n.language) {
  266.                     lang = n.language.toLowerCase()
  267.                 } else {
  268.                     if (n.browserLanguage) {
  269.                         lang = n.browserLanguage.toLowerCase()
  270.                     }
  271.                 }
  272.                 java = n.javaEnabled() ? 1 : 0;
  273.                 pf = n.platform;
  274.                 tz = new Date().getTimezoneOffset() / 60;
  275.                 ret = "&scr=" + scr + "&scl=" + scl + "&lg=" + lang + "&jv=" + java + "&pf=" + pf + "&tz=" + tz
  276.             } catch (e) {} finally {
  277.                 return ret
  278.             }
  279.         },
  280.         getExtendEnvInfo: function () {
  281.             var ret = "";
  282.             try {
  283.                 var flash, currentUrl = _l.href,
  284.                     connectType = _n;
  285.                 ret += "&fl=" + this.getFlashInfo();
  286.                 if (_b.addBehavior) {
  287.                     _b.addBehavior("#default#homePage");
  288.                     if (_b.isHomePage(currentUrl)) {
  289.                         ret += "&hp=Y"
  290.                     }
  291.                 }
  292.                 if (_b.addBehavior) {
  293.                     _b.addBehavior("#default#clientCaps");
  294.                     connectType = _b.connectionType
  295.                 }
  296.                 ret += "&ct=" + connectType
  297.             } catch (e) {} finally {
  298.                 return ret
  299.             }
  300.         },
  301.         getFlashInfo: function () {
  302.             var f = _n,
  303.                 n = navigator;
  304.             try {
  305.                 if (n.plugins && n.plugins.length) {
  306.                     for (var i = 0; i < n.plugins.length; i++) {
  307.                         if (n.plugins[i].name.indexOf("Shockwave Flash") > -1) {
  308.                             f = n.plugins[i].description.split("Shockwave Flash ")[1];
  309.                             break
  310.                         }
  311.                     }
  312.                 } else {
  313.                     if (window.ActiveXObject) {
  314.                         for (var i = 12; i >= 5; i--) {
  315.                             try {
  316.                                 var fl = eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash." + i + "');");
  317.                                 if (fl) {
  318.                                     f = i + ".0";
  319.                                     break
  320.                                 }
  321.                             } catch (e) {}
  322.                         }
  323.                     }
  324.                 }
  325.             } catch (e) {}
  326.             return f
  327.         },
  328.         getParameter: function (name, src) {
  329.             if (name && src) {
  330.                 var r = new RegExp("(\\?|#|&)" + name + "=([^&^#]*)(#|&|$)");
  331.                 var m = src.match(r);
  332.                 return m ? m[2] : ""
  333.             }
  334.             return ""
  335.         },
  336.         getCookieSetDomain: function () {
  337.             var dotlen, pos, domainToSet, dot = [],
  338.                 j = 0;
  339.             for (var i = 0; i < _curDomain.length; i++) {
  340.                 if (_curDomain.charAt(i) == ".") {
  341.                     dot[j] = i;
  342.                     j++
  343.                 }
  344.             }
  345.             dotlen = dot.length;
  346.             pos = _curDomain.indexOf(".cn");
  347.             if (pos > -1) {
  348.                 dotlen--
  349.             }
  350.             domainToSet = "qq.com";
  351.             if (dotlen == 1) {
  352.                 domainToSet = _curDomain
  353.             } else {
  354.                 if (dotlen > 1) {
  355.                     domainToSet = _curDomain.substring(dot[dotlen - 2] + 1)
  356.                 }
  357.             }
  358.             return domainToSet
  359.         },

  360. #这是最危险的地方:它会记录你在卡饭上的一切点击、一切输入情况,这个点击好像还是精确到像素的;但是会不会把你输入的内容发给腾讯,我看不出来

  361.         watchClick: function (e) {
  362.             try {
  363.                 var istag = true,
  364.                     hottag = "",
  365.                     srcElement;
  366.                 srcElement = window.event ? window.event.srcElement : e.target;
  367.                 switch (srcElement.tagName) {
  368.                 case "A":
  369.                     hottag = "<A href=" + srcElement.href + ">" + srcElement.innerHTML + "</a>";
  370.                     break;
  371.                 case "IMG":
  372.                     hottag = "<IMG src=" + srcElement.src + ">";
  373.                     break;
  374.                 case "INPUT":
  375.                     hottag = "<INPUT type=" + srcElement.type + " value=" + srcElement.value + ">";
  376.                     break;
  377.                 case "BUTTON":
  378.                     hottag = "<BUTTON>" + srcElement.innerText + "</BUTTON>";
  379.                     break;
  380.                 case "SELECT":
  381.                     hottag = "SELECT";
  382.                     break;
  383.                 default:
  384.                     istag = false;
  385.                     break
  386.                 }
  387.                 if (istag) {
  388.                     var t = new tcss(_params);
  389.                     var pos = t.getElementPos(srcElement);
  390.                     var scr, scl;
  391.                     if (_params.coordinateId) {
  392.                         var coordinatePos = t.getElementPos(document.getElementById(_params.coordinateId));
  393.                         pos.x -= coordinatePos.x
  394.                     }
  395.                     t.url.push(t.getDomainInfo(true));
  396.                     t.url.push("&ht=" + escape(hottag));
  397.                     t.url.push("&x=" + pos.x);
  398.                     t.url.push("&y=" + pos.y);
  399.                     if (self.screen) {
  400.                         scr = screen.width + "x" + screen.height;
  401.                         scl = screen.colorDepth + "-bit";
  402.                         t.url.push("&scr=" + scr + "&scl=" + scl)
  403.                     }
  404.                     t.url.push("&rand=" + Math.round(Math.random() * 100000));
  405.                     t.url.unshift("http://pinghot." + _domainToSet + "/pingd?");
  406.                     t.sendInfo(t.url.join(""))
  407.                 }
  408.             } catch (ex) {}
  409.         },
  410.         getElementPos: function (el) {
  411.             if (el.parentNode === null || el.style.display == "none") {
  412.                 return false
  413.             }
  414.             var ua = navigator.userAgent.toLowerCase(),
  415.                 parent = null,
  416.                 pos = [],
  417.                 box;
  418.             if (el.getBoundingClientRect) {
  419.                 var scrollTop, scrollLeft, clientTop, clientLeft;
  420.                 box = el.getBoundingClientRect();
  421.                 scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
  422.                 scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
  423.                 clientTop = document.body.clientTop;
  424.                 clientLeft = document.body.clientLeft;
  425.                 return {
  426.                     x: box.left + scrollLeft - clientLeft,
  427.                     y: box.top + scrollTop - clientTop
  428.                 }
  429.             } else {
  430.                 if (document.getBoxObjectFor) {
  431.                     box = document.getBoxObjectFor(el);
  432.                     var borderLeft = (el.style.borderLeftWidth) ? Math.floor(el.style.borderLeftWidth) : 0;
  433.                     var borderTop = (el.style.borderTopWidth) ? Math.floor(el.style.borderTopWidth) : 0;
  434.                     pos = [box.x - borderLeft, box.y - borderTop]
  435.                 } else {
  436.                     pos = [el.offsetLeft, el.offsetTop];
  437.                     parent = el.offsetParent;
  438.                     if (parent != el) {
  439.                         while (parent) {
  440.                             pos[0] += parent.offsetLeft;
  441.                             pos[1] += parent.offsetTop;
  442.                             parent = parent.offsetParent
  443.                         }
  444.                     }
  445.                     if (ua.indexOf("opera") > -1 || (ua.indexOf("safari") > -1 && el.style.position == "absolute")) {
  446.                         pos[0] -= document.body.offsetLeft;
  447.                         pos[1] -= document.body.offsetTop
  448.                     }
  449.                 }
  450.             }
  451.             if (el.parentNode) {
  452.                 parent = el.parentNode
  453.             } else {
  454.                 parent = null
  455.             }
  456.             while (parent && parent.tagName != "BODY" && parent.tagName != "HTML") {
  457.                 pos[0] -= parent.scrollLeft;
  458.                 pos[1] -= parent.scrollTop;
  459.                 if (parent.parentNode) {
  460.                     parent = parent.parentNode
  461.                 } else {
  462.                     parent = null
  463.                 }
  464.             }
  465.             return {
  466.                 x: pos[0],
  467.                 y: pos[1]
  468.             }
  469.         },
  470.         sendClick: function () {
  471.             if (_params.hottag) {
  472.                 this.url.push(this.getDomainInfo(true));
  473.                 this.url.push("&ht=" + escape(_params.hottag));
  474.                 this.url.push("&x=9999&y=9999");
  475.                 this.url.push("&rand=" + Math.round(Math.random() * 100000));
  476.                 this.url.unshift("http://pinghot." + _domainToSet + "/pingd?");
  477.                 this.sendInfo(this.url.join(""))
  478.             }
  479.         },
  480.         sendInfo: function (url) {
  481.             _image = new Image(1, 1);
  482.             _image.src = url
  483.         }
  484.     };
  485.     var _udv = {
  486.         vscope: {
  487.             page: 3,
  488.             session: 2,
  489.             user: 1
  490.         },
  491.         setv: function (tuple) {
  492.             var params = _n;
  493.             var val = _n;
  494.             if (!tuple || !tuple.name || tuple.name == "" || !tuple.value || tuple.value == "" || !tuple.scope || tuple.scope < 1 || tuple.scope > 3) {
  495.                 val = _cookie.get(tuple.name + "=") == _n ? _cookie.get(tuple.name + "=", true) : _cookie.get(tuple.name + "=");
  496.                 if (_n != val) {
  497.                     params = "&" + tuple.name + "=" + tuple.value
  498.                 }
  499.             } else {
  500.                 var val = tuple.name + "=" + tuple.value;
  501.                 switch (tuple.scope) {
  502.                 case this.vscope.page:
  503.                     break;
  504.                 case this.vscope.session:
  505.                     _cookie.setCookie(tuple.name, false, tuple.value);
  506.                     break;
  507.                 case this.vscope.user:
  508.                     _cookie.setCookie(tuple.name, true, tuple.value);
  509.                     break
  510.                 }
  511.                 params = "&" + val
  512.             }
  513.             return params
  514.         }
  515.     };
  516.     var _cookie = {
  517.         sck: [],
  518.         sco: {},
  519.         init: function () {
  520.             var value = this.get("pgv_info=", true);
  521.             if (value != _n) {
  522.                 var arr = value.split("&");
  523.                 for (var i = 0; i < arr.length; i++) {
  524.                     var arr2 = arr[i].split("=");
  525.                     this.set(arr2[0], unescape(arr2[1]))
  526.                 }
  527.             }
  528.         },
  529.         get: function (name, isend) {
  530.             var cookies = isend ? _d.cookie : this.get("pgv_info=", true);
  531.             var value = _n;
  532.             var offset, end;
  533.             offset = cookies.indexOf(name);
  534.             if (offset > -1) {
  535.                 offset += name.length;
  536.                 end = cookies.indexOf(";", offset);
  537.                 if (end == -1) {
  538.                     end = cookies.length
  539.                 }
  540.                 if (!isend) {
  541.                     var end2 = cookies.indexOf("&", offset);
  542.                     if (end2 > -1) {
  543.                         end = Math.min(end, end2)
  544.                     }
  545.                 }
  546.                 value = unescape(cookies.substring(offset, end))
  547.             }
  548.             return value
  549.         },
  550.         set: function (key, value) {
  551.             this.sco[key] = value;
  552.             var isExist = false;
  553.             var sckLen = this.sck.length;
  554.             for (var i = 0; i < sckLen; i++) {
  555.                 if (key == this.sck[i]) {
  556.                     isExist = true;
  557.                     break
  558.                 }
  559.             }
  560.             if (!isExist) {
  561.                 this.sck.push(key)
  562.             }
  563.         },
  564.         setCookie: function (name, isend) {
  565.             var id = _cookie.get(name + "=", isend);
  566.             if (id == _n) {
  567.                 isend ? id = "" : id = "s";
  568.                 var curDate = new Date();
  569.                 var curMs = curDate.getUTCMilliseconds();
  570.                 id += (Math.round(Math.abs(Math.random() - 1) * 2147483647) * curMs) % 10000000000
  571.             }
  572.             if (isend) {
  573.                 this.saveCookie(name + "=" + id, "expires=Sun, 18 Jan 2038 00:00:00 GMT;")
  574.             } else {
  575.                 this.set(name, id)
  576.             }
  577.             return id
  578.         },
  579.         save: function () {
  580.             if (_params.sessionSpan) {
  581.                 var expires = new Date();
  582.                 expires.setTime(expires.getTime() + (_params.sessionSpan * 60 * 1000))
  583.             }
  584.             var cookies = "";
  585.             var sckLen = this.sck.length;
  586.             for (var i = 0; i < sckLen; i++) {
  587.                 cookies += this.sck[i] + "=" + this.sco[this.sck[i]] + "&"
  588.             }
  589.             cookies = "pgv_info=" + cookies.substr(0, cookies.length - 1);
  590.             var expire = "";
  591.             if (expires) {
  592.                 expire = "expires=" + expires.toGMTString()
  593.             }
  594.             this.saveCookie(cookies, expire)
  595.         },
  596.         saveCookie: function (cookie, expires) {
  597.             _d.cookie = cookie + ";path=/;domain=" + _domainToSet + ";" + expires
  598.         }
  599.     };
  600.     window.pgvMain = function (params) {
  601.         try {
  602.             new tcss(params).run()
  603.         } catch (e) {}
  604.     };
  605.     window.pgvSendClick = function (params) {
  606.         new tcss(params).sendClick()
  607.     };
  608.     window.pgvWatchClick = function (params) {
  609.         new tcss(params).watchClick(params)
  610.     }
  611. })();
复制代码
就像路上的广告牌一样,你可以选择不看它们,同时不影响你正常走路。

那么互联网上的广告/统计等内容也是一样,只要你愿意,就是可以屏蔽,而同时不影响正常使用的。

何况我们可以



还是老样子,这里给希望说不的人提供一个阻止腾讯统计的方法:


阻止的话,也许论坛后台的统计功能造成影响,这些统计数据对theone管理员对卡饭的决策可能有十分重要的作用


在adblock plus及其它兼容adblock语法的浏览器扩展中
  1. ||tcss.qq.com/ping.js
复制代码
即可(全程阻止)

如果是xx卫士、杀毒软件的url过滤、其它第三方广告过滤软件
把以下条目加入黑名单
  1. http://tcss.qq.com/ping.js
复制代码
如果担心到兼容性,可用
  1. ||tcss.qq.com/ping.js$third-party
复制代码
仅在第三方访问时禁止读取该js,仅适用于兼容adblock语法的产品

如果仅希望在卡饭禁止读取该脚本
  1. ||tcss.qq.com/ping.js$domain=kafan.cn
复制代码
同样仅适用于兼容adblock语法的产品


或者可以使用noscript
把tcss.qq.com设为禁止或不可信任

评分

参与人数 4人气 +4 收起 理由
紫涵 + 1 支持一下
思梦潮 + 1 辛苦了
年下 + 1 一直希望论坛能取消QQ有关的东西
Johnkay.Young + 1

查看全部评分

紫涵
发表于 2011-6-19 02:54:35 | 显示全部楼层
最不喜欢的就是QQ哪个地方都要插一脚,而且还这么流氓!
种过一豆
发表于 2011-6-19 03:05:34 | 显示全部楼层
技术分析贴,个人也比较不稀饭tx
jason_jiang
发表于 2011-6-19 05:46:43 | 显示全部楼层
0.0.0.0 tcss.qq.com
已经提交HostsX黑名单
猪头无双
头像被屏蔽
发表于 2011-6-19 05:53:13 | 显示全部楼层
嗯,我想看看某阵营是如何说法

看来host名单需要更新了
jason_jiang
发表于 2011-6-19 06:07:29 | 显示全部楼层
猪头无双 发表于 2011-6-19 05:53
嗯,我想看看某阵营是如何说法

看来host名单需要更新了

直接用路由器封了

tx.png
猪头无双
头像被屏蔽
发表于 2011-6-19 06:11:16 | 显示全部楼层
jason_jiang 发表于 2011-6-19 06:07
直接用路由器封了

有米的人啊我还买不起路由
ssama
发表于 2011-6-19 08:19:06 | 显示全部楼层
这个脚本果然v5。。
光之优雅
发表于 2011-6-19 08:52:13 | 显示全部楼层
腾讯。。。我不说什么了。。。
乐活
发表于 2011-6-19 10:38:18 | 显示全部楼层
强制广告,很烦人啊!
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-1-13 08:05 , Processed in 0.153247 second(s), 20 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表