太久沒有寫博客了,這個懶惰的慣性實在是太強(qiáng)大。這兩天不說說360和QQ的事情,就顯得很out了,但是說來說去卻又很雞毛。另外我怎么沒有看到什么彈窗呢,聽說好不熱鬧啊,TM/MSN和MSE用戶艱難的表示鴨梨很大。騰訊云輸入法回傳用戶輸入數(shù)據(jù),在這個節(jié)骨眼上被逮到,還真算給力。
大家可以去“騰訊軟件中心”試試這個云輸入法,http://py.qq.com/web/。但是注意不要輸入什么敏感內(nèi)容,免的有被跨省的風(fēng)險。百度也有類似的輸入法,只是好像沒有咋呼叫作云輸入法,而且百度還支持手寫。誰有興趣,可以查一下哪家先出的這種輸入法?
說正經(jīng)的,QQ云輸入法是怎么工作的呢?很簡單,給任意一個網(wǎng)頁導(dǎo)入一個腳本文件就可以了。
<script type="text/javascript" language="JavaScript" src="http://ime.qq.com/fcgi-bin/getjs"></script>
相當(dāng)簡單。然后呢,取回一個大約42k的文件,叫ime.js。文件是壓縮過的,版本號:rev.632(這個很重要,待會兒他們一加班,就拿不到了)
腳本啟動后,會后先向服務(wù)器報告一下客戶端環(huán)境,這些從瀏覽器里獲取的參數(shù),不是什么隱私,就是user-agent都比這豐富。
http://ime.qq.com/fcgi-bin/reportfirst?key=d02e5d08310c90ac54d37089fbf3d8ed&version=632&sp=1&sw=1920&sh=1080&dw=1920&dh=512&t=1289458673612
但是驚喜還是有的,這個報告中包含了一個唯一的key,作用就相當(dāng)于瀏覽器session_id。接下來的所有和騰訊服務(wù)器的交互,都會帶著這個key。
在英文輸入狀態(tài)下,任何字符輸入會被云輸入法腳本截獲,然后向服務(wù)器回發(fā)如下請求:
http://ime.qq.com/fcgi-bin/getword?key=d02e5d08310c90ac54d37089fbf3d8ed&cb=window.QQWebIME.callback612&q=qq
注意key!cb是ime.js運(yùn)行后注冊的回調(diào)函數(shù),藍(lán)色的qq是我的輸入。服務(wù)器響因為:
window.QQWebIME.callback612({"is_end":"0","p":"1","pg":"5","q":"qq","ret":"suc","rs":["QQ","親戚","親親","悄悄","輕輕","強(qiáng)求","求求","缺錢","請求","親切","圈圈","前期","瞧瞧","親情","全球","氣球","齊全","取錢","情趣","千千"],"rscnt":"20","rsn":["2","2","2","2","2","2","2","2","2","2","2","2","2","2","2","2","2","2","2","2"]})
這時你可以像普通輸入法一樣進(jìn)行選詞,而且很自然的是,選詞后沒有服務(wù)器請求發(fā)生。也就是你的輸入內(nèi)容,都是在瀏覽器本地完成的,騰訊除了知道你請求了什么候選詞列表外,不知道你到底輸入了什么。似乎這一切都很美好,也就應(yīng)該是這么美好才對,是吧?
但是這不是360在隱私問題上掐QQ嗎,本來我一直認(rèn)為騰訊這么大一個上市公司,做事還是該有點(diǎn)底線的。但是360讓大家看到了騰訊是沒有底線的,真流氓揭露了偽君子。于是我就懷著最大的惡意想,這輸入法因該還是有問題的。于是繼續(xù)使用,突然發(fā)現(xiàn)一個異常的服務(wù)器請求,如下:
http://ime.qq.com/fcgi-bin/reportword?key=d02e5d08310c90ac54d37089fbf3d8ed&num=11&xl=danshi,%E4%BD%86%E6%98%AF,0,0,1,0|zhe,%E8%BF%99,0,0,1,0|bushi,%E4%B8%8D%E6%98%AF,0,0,1,0|zaihe,%E5%9C%A8%E5%92%8C,0,0,1,0|tengxun,%E8%85%BE%E8%AE%AF,0,0,1,0|zuoweiyige,%E4%BD%9C%E4%B8%BA%E4%B8%80%E4%B8%AA,0,0,1,0|shangshi,%E4%B8%8A%E5%B8%82,0,0,1,0|gongsi,%E5%85%AC%E5%8F%B8,0,0,1,0|zuoshihaishiyinggai,%E5%81%9A%E4%BA%8B%E8%BF%98%E6%98%AF%E5%BA%94%E8%AF%A5,0,0,1,0|you,%E6%9C%89,0,0,1,0|dixian,%E5%BA%95%E7%BA%BF,0,0,1,0
把這堆編碼過的字符轉(zhuǎn)回來,是:
http://ime.qq.com/fcgi-bin/reportword?key=d02e5d08310c90ac54d37089fbf3d8ed&num=11&xl=danshi,但是,0,0,1,0|zhe,這,0,0,1,0|bushi,不是,0,0,1,0|zaihe,在和,0,0,1,0|tengxun,騰訊,0,0,1,0|zuoweiyige,作為一個,0,0,1,0|shangshi,上市,0,0,1,0|gongsi,公司,0,0,1,0|zuoshihaishiyinggai,做事還是應(yīng)該,0,0,1,0|you,有,0,0,1,0|dixian,底線,0,0,1,0
你這時是不是只想向狗日的企鵝豎起中指呢?
這是不是我沒看清楚了,把ime.js仔細(xì)看了一下,tmd居然是混淆過的,看得我好累
。謎底就在這里了:
ha = function () {
var e = [], a = new Image(1, 1), b = false,
j = function () {
a.onload = a.onerror = null;
b = false;
J && CollectGarbage()
},
r = function (w) {
b && j();
a.src = w;
a.onload = a.onerror = j;
a.complete && j();
b = true
},
s = "", n = "",
v = function () {
return s + "&num=" + e.length + "&xl=" + e.join("|")
};
return {
a:
function () {
var w;
w = c.c();
w = o.b("cgiPrx") + "reportfirst?key=" + o.b("prvKey") + "&version=632&sp=" + o.b("lnchr") + "&sw="
+ screen.width + "&sh=" + screen.height + "&dw=" + w[0] + "&dh=" + w[1] + "&t=" + Ba;
r(w);
s = o.b("cgiPrx") + "reportword?key=" + o.b("prvKey")
},
b:
function (w) {
if (S !== w) {
var l = w.length;
if (0 !== l) {
for (var h = "", m = "", g = 0; g < l; g++) {
var x = w[g],
k = encodeURIComponent(x.kanji);
e.push(x.spell + "," + k + "," + n);
h += x.spell;
m += k
}
1 < l && e.push(h + "," + m + "," + n);
if (10 < e.length) {
r(v()); e = []
}
}
}
},
j:
function (w) {
w = o.b("cgiPrx") + "re?key=" + o.b("prvKey") + "&ec=" + w + "&py=" + B.o() + "&t="
+ (+new Date).toString().slice(0, -3) + "&v=632";
r(w)
},
k:
function () {
if (0 !== e.length) {
r(v());
e = []
}
},
l:
function () {
var w = 1 === o.b("iptMode");
n = ["0", o.b("iptMode") - 1, w ? o.b("pyMode") : "0", w && 1 !== o.b("pyMode") ? o.b("spType") : "0"].join(",")
}
}
} ()
多貼點(diǎn)code,表示這是技術(shù)貼,不是5毛貼咯(聽說漲7毛了,通脹太厲害了)。答案就在這個ha偽類的函數(shù)b里,這個b函數(shù)是用來記錄輸入歷史的,但是在這個方法最后,做了一個判斷:if (10 < e.length) { r(v()); e = [] }。e是存放輸入歷史的數(shù)組,方法r和v是負(fù)責(zé)組裝和回發(fā)數(shù)據(jù)的,發(fā)完后清空了e。
難道收集用戶輸入內(nèi)容成了中國國情了?微軟拼音2010還真的有這個功能,不過它會明確提示用戶,并且只是發(fā)回那些用戶糾正輸入推薦,而且回發(fā)的內(nèi)容也是用戶可以很容易看到和編輯的。另外同樣是web ime的百度輸入法,回發(fā)服務(wù)器的信息是:
http://olime.baidu.com/py?py=baidu&rn=0&pn=20&t=1289460415974
注意,這里沒有key信息,這不是說百度就不能identify你,因為還有瀏覽器session_id,但是百度的輸入法沒有回發(fā)用戶實際選詞,所以是無法在服務(wù)期上還原用戶輸入的。
雖然這是篇技術(shù)文章,但是肯定摻雜了莫名的立場,那我現(xiàn)在的立場就是:脅迫用戶者不得好死!