腾讯云输入法如何回发用户输入
来源:互联网 发布:行业研究员待遇 知乎 编辑:程序博客网 时间:2024/04/29 16:03
大家可以去“腾讯软件中心”试试这个云输入法,http://py.qq.com/web/。但是注意不要输入什么敏感内容,免的有被跨省的风险。百度也有类似的输入法,只是好像没有咋呼叫作云输入法,而且百度还支持手写。谁有兴趣,可以查一下哪家先出的这种输入法?
说正经的,QQ云输入法是怎么工作的呢?很简单,给任意一个网页导入一个脚本文件就可以了。
相当简单。然后呢,取回一个大约42k的文件,叫ime.js。文件是压缩过的,版本号:rev.632(这个很重要,待会儿他们一加班,就拿不到了)
脚本启动后,会后先向服务器报告一下客户端环境,这些从浏览器里获取的参数,不是什么隐私,就是user-agent都比这丰富。
但是惊喜还是有的,这个报告中包含了一个唯一的key,作用就相当于浏览器session_id。接下来的所有和腾讯服务器的交互,都会带着这个key。
在英文输入状态下,任何字符输入会被云输入法脚本截获,然后向服务器回发如下请求:
注意key!cb是ime.js运行后注册的回调函数,蓝色的qq是我的输入。服务器响因为:
这时你可以像普通输入法一样进行选词,而且很自然的是,选词后没有服务器请求发生。也就是你的输入内容,都是在浏览器本地完成的,腾讯除了知道你请求了什么候选词列表外,不知道你到底输入了什么。似乎这一切都很美好,也就应该是这么美好才对,是吧?
但是这不是360在隐私问题上掐QQ吗,本来我一直认为腾讯这么大一个上市公司,做事还是该有点底线的。但是360让大家看到了腾讯是没有底线的,真流氓揭露了伪君子。于是我就怀着最大的恶意想,这输入法因该还是有问题的。于是继续使用,突然发现一个异常的服务器请求,如下:
把这堆编码过的字符转回来,是:
你这时是不是只想向狗日的企鹅竖起中指呢?
这是不是我没看清楚了,把ime.js仔细看了一下,tmd居然是混淆过的,看得我好累。谜底就在这里了:
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(",")
}
}
} ()
多贴点code,表示这是技术贴,不是5毛贴咯(听说涨7毛了,通胀太厉害了)。答案就在这个ha伪类的函数b里,这个b函数是用来记录输入历史的,但是在这个方法最后,做了一个判断:if (10 < e.length) { r(v()); e = [] }。e是存放输入历史的数组,方法r和v是负责组装和回发数据的,发完后清空了e。
难道收集用户输入内容成了中国国情了?微软拼音2010还真的有这个功能,不过它会明确提示用户,并且只是发回那些用户纠正输入推荐,而且回发的内容也是用户可以很容易看到和编辑的。另外同样是web ime的百度输入法,回发服务器的信息是:
注意,这里没有key信息,这不是说百度就不能identify你,因为还有浏览器session_id,但是百度的输入法没有回发用户实际选词,所以是无法在服务期上还原用户输入的。
虽然这是篇技术文章,但是肯定掺杂了莫名的立场,那我现在的立场就是:胁迫用户者不得好死!
本文转自:http://www.cnblogs.com/birdshome/archive/2010/11/11/qq_ime.html
- 腾讯云输入法如何回发用户输入
- 腾讯云root用户
- 利用输入法输入汉字,如何统计字数
- 【BASH】如何读取用户输入
- 如何控制用户的输入
- 用户控件事件回发
- 如何解决Android中输入法挡住输入框的问题
- 如何解决Android中输入法挡住输入框的问题
- 如何解决Android中输入法挡住输入框的问题
- 如何解决Android中输入法挡住输入框的问题
- excel 如何限定用户的输入范围
- 腾讯微云用户突破3亿
- Android 腾讯 云通信 用户头像更新
- 如何禁止用户在文本输入框中输入数字
- 如何截获带文本输入的控件的输入法输入结果 C#
- android Edittext 弹出输入法加 语音布局 不遮挡 用户输入内容
- 搜狐、腾讯发件简介
- 控制输入发窗口
- CListCtrl控件使用方法总结
- System.InvalidCastException: 对象不能从 DBNull 转换为其他类型。
- achartengine画出动态折线图的效果
- VC6.0内存泄露检测工具
- 全国各省市 残疾人联合会 就业 康复 网站导航
- 腾讯云输入法如何回发用户输入
- 后缀数组若干问题
- 状态机系统学习总结
- PKCS #1: RSA Cryptography Standard
- 如何同时启动两个Android模拟器
- Using Xcode Storyboarding (iPhone iOS 5)
- JDeveloper初步:创建Java Swing应用程序
- c文件处理
- ubuntu上配置git服务器