你现在登录到Google了吗?JavaScript 大师Kent Brewster提出的这个问题来自于其一系列让人大开眼界的How-to-tell研究。早些时候我们看到Kent的文章 hack of NetFlix JavaScript (他已经搞定了 Twitter 和 Facebook)。这次轮到了Google的头上,让我们来看看他的文章How to Tell if a User is Logged In to Google。
文章中谈到:“我们正在查找的是一个来自目标域的URL,他返回的是一段根据用户的登录状态不同而不同的脚本。”这就为获得这些信息打开了一道小门。 并且它现在是可以正常工作的:如果你访问他的页面,会看到如下的信息,它获得了你在Google的状态:
这一小短源代码片断 暴露出客户端的JavaScript存在的一些风险。应用聚合有可能会在不引起你注意的情况下执行。总之,他的一系列尝试为开发人员带来了两条非常关键的建议:
* 不要返回依赖于用户登录状态的实时的JavaScript代码。
* 任何URL可被纳入为一个脚本标签,并用来检测你的状态信息。如果你的浏览器依据你的用户状态抛出了不同的错误信息,那么你可能正在泻露你的信息。
另一个对开发人员有用的忠告是 文章中提到的“Tamper Data是你忠实的朋友”。这是一个Mozilla扩展,让你可以查看和调整HTTP/HTTPS头和提交的参数,对HTTP 请求/应答进行跟踪和计时,并且安全的测试WEB应用。
让我们再看看是如何实现的
首先在Google中找到了两个依赖于用户状态的URL
一个是http://www.google.com/notebook/read
一个是http://www.google.com/notebook/write
* 如果你已经登录到Google并激活了“NoteBook”应用,那么会返回:T();
* 如果你已经登录到Google但没有激活“NoteBook”应用,那么会返回:L(’https://www.google.com/accounts/NewServiceAccount?service\
75notebook\46continue\75http%3A%2F%2Fwww.google.com%2Fnotebook%2F\
46followup\75http%3A%2F%2Fwww.google.com%2Fnotebook%2F\46hl\75en’);
* 如果你没有登录到Google,那么会返回:L(’https://www.google.com/accounts/ServiceLogin?service\
75notebook\46passive\75true\46nui\0751\46continue\
75http%3A%2F%2Fwww.google.com%2Fnotebook%2F\46followup\
75http%3A%2F%2Fwww.google.com%2Fnotebook%2F\46hl\75en’);
* 那么接下来这段脚本就可以判断你在Google的登录状态:
<p id="status">Checking your Google login status.</p>
<script>
var L = function(url) {
if (url.match(/ServiceLogin/)) {
document.getElementById(’status’).innerHTML =
’You are not logged in to <a href="http://google.com">Google</a>.’;
} else {
document.getElementById(’status’).innerHTML =
’You are logged in to <a href="http://google.com">Google</a>.’;
}
};
var T = function() {
document.getElementById(’status’).innerHTML =
’You are logged in to <a href="http://google.com">Google</a>.
Oh, and you have a Google Notebook account.’;
};
var s = document.createElement(’SCRIPT’);
s.type = ’text/javascript’;
s.src = ’http://www.google.com/notebook/read’;
document.getElementsByTagName(’BODY’)[0].appendChild(s);
</script>
[ 阅读全文 ]