你的Cookie安全吗?!

上篇文章(http://evilcos.me/?p=251)提到了跨子域安全问题,这已经是一些互联网大公司的宿命?我真想知道是哪位前端工程师或架构师将这种为了便利而滥用跨子域技巧的思想带到本该分离的业务里?这样埋下的种子总有一天会变成雷。这个技巧最常见的有两种模式:

1. 人人网那样,几乎所有子域都嵌入一段通用脚本,设置document.domain=”renren.com”;
2. 大多数网站(腾讯、百度、新浪等等)的做法:子域的某路径下有个ajaxproxy.htm或proxy.html等类似文件名的文件,里面的代码是:

<script>
try{document.domain = window.location.hostname.split(‘.’).reverse().slice(0,2).reverse().join(‘.’);}catch(e){}
getTransport = function( )
{
try
{
try
{
return new ActveXObject( ‘Msxml2.XMLHTTP’ );
}
catch( e )
{
return new ActiveXObject( ‘Microsoft.XMLHTTP’ );
}
}
catch( e )
{
return new XMLHttpRequest();
}
};
</script>

怎么个危害,怎么个让小黑们坏笑的猥琐技巧,看上篇文章(http://evilcos.me/?p=251)里给出的测试demo吧,本篇文章的重点不说这个了。

跨子域安全问题,除了常说的上面这种方式,还一个和Cookie有关的,在《Web前端黑客技术揭秘》第二章我们已经将Cookie安全说的很透(没买书的同学,可以看这里的试读:http://vdisk.weibo.com/s/mb-I4),不过书里没有这方面精彩的实战,我现在有一些精彩的实战,想了想也没必要放出,有心人总会遇到,只是提醒这些业务的架构师们几句:

1. 如果你的业务是https,请将重要的Cookie(比如和身份认证有关的)设置个secure标志;
2. 这些重要的Cookie完全可以考虑加个HttpOnly标志;
3. 最重要的是!不要将本来属于你这个业务子域的Cookie设置到顶级域上!
4. 以上设置在任何主流的Web服务开发语言都是类似set-cookie这样的函数,搞懂里面各个参数吧;
5. 随着Web前端黑客的崛起,总会有一些人开始做“坏事”,看看人家李开复等的账号都被劫持了(http://www.wooyun.org/bugs/wooyun-2013-017137),下次劫持你们的老板,然后做点坏事,你们就有冲劲接受我的建议了;

下篇八卦下知道创宇的理念或说愿景:更好更安全的互联网。让这些人知道下为什么你们这样做是罪大恶极。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据