匿名评论 MSN Space 的尝试失败

MSN Space 真是麻烦,发表评论竟然偏要用他的 passport 登录,于是老汉今天下午着手研究能不能匿名评论。

从基本问题入手啊,最表面的现象就是如果不登录的话所有的输入域都是处于禁止状态的。联想到前几天才知道的地址栏上也可以执行脚本的知识,于是解决方案就顺理成章了,我的第一次尝试如下:
javascript:document.all.txtNamecns!1pT-_vAfaYbpcFEI23XZlwLg!514.disabled = false;
all 和 disabled 之间的元素 ID 或者 NAME 是从源代码里找到的,可惜执行以后没有任何反应,考虑良久,发现这种名称里包含了减号,可能导致问题,于是把脚本改成了如下:
javascript:document.all[“txtNamecns!1pT-_vAfaYbpcFEI23XZlwLg!514”].disabled = false;
这下倒是有效果了,可是浏览器转向了,文档里光秃秃地只显示着“false”这么一个词。又仔细想了一下,最终认为这是因为本条语句具有返回值的原因,第三次的版本:
javascript:alert(document.all[“txtNamecns!1pT-_vAfaYbpcFEI23XZlwLg!514”].disabled = false);
呵呵,终于成功了,页面上的“名字”域乖乖地可以输入文字了,依葫芦画瓢把“评论”域也搞定了。

轮到了“发布评论”按钮时出现了问题,这个东东没有名字,只是 onclick 事件关联着脚本,只好霸王硬上弓了,它干什么我也干什么,于是我在命令行上又来了这么一下子:
javascript:alert(PostComment(‘cns!1pT-_vAfaYbpcFEI23XZlwLg!514’));
,结果出来一行提示:“服务器出现问题。请重试。”

没 办法,到源文件里找这个信息,发现这是一个名为 BlogJS_blogview_servererror 的变量的内容,再查找该变量时发现整个文件里竟然只有这一处。看来多半在 .js 文件里有文章,找遍了 .js 文件后,发现名为 BlogJS.js 这个文件可能性比较大,于是从 IE 的缓存文件里把它给抓了出来,打开后一看,哈哈,果然在这里。

不过高兴劲儿两分钟就过去了,应为仅当脚本中创建的 Microsoft.XMLHTTP 对象的确从服务器端接到表示失败的反馈才会出现上述信息,而且上下文的代码中确有验证 passport 的内容。

唉, 看来匿名评论好像的确不好搞。不过本身也是一次有趣的探索啊,正好可以澄清前一段时间和 shocker-cn 讨论的一些内容。当时我说,发表评论的过程微软肯定使用了 IFRAME,结果这个论断是错的,微软直接使用了 Microsoft.XMLHTTP 对象与服务器进行交互,可是从脚本里看不出请求的地址以及会话的管理。不过微软在发表失败后好像有一个刷新 passport 的动作,其中使用到了 IFRAME,但没有细看。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注