关于跨站脚本攻击及防范

www.net130.com     日期:2011-1-10    浏览次数:
出处:http://www.cnking.org/post/744.html

一、跨站脚本攻击的概念
跨站点脚本攻击即CSS(Cross Site Script),也称为XSS,是一种针对特殊Web站点的客户隐私的攻击。
目前,网络安全问题已经是全世界共同关注的问题。跨站脚本攻击被认为是目前为止网络安全中最为常用,攻击成功率最高的一种攻击手段。攻击者改变了以往单一攻击服务器或者客户端的攻击模式,而是借用我们的服务器,向WEB页面的可用链接中插入恶意代码,当我们的用户打开这些带有恶意代码的链接时,内嵌程序被提交并且执行,从而使攻击者能够窃取用户cookie,甚至装扮成被攻击的用户来完全控制Web应用程序,达到他的特殊目的。
二、跨站脚本攻击的危害
一般来说,XSS并不会对用户的机器造成损害,也不会对Web应用程序服务器直接造成破坏。攻击者的主要目的是窃取用户Cookie,在被攻击用户面前伪装成Web应用程序,或者在Web应用程序面前伪装成被攻击用户。所以,在XSS攻击所涉及三方面——攻击者、被攻击者(网页浏览者)、存在漏洞的网站——网站只是攻击者进行攻击的一个载体,本身基本不会受到影响,只有被攻击者会实际运行攻击者的代码,面临着的安全威胁主要有以下几个方面。
具体危害主要有以下几个方面:
1、 账户失窃。
2、 数据信息被读取、篡改、添加或者删除。
3、 非法转账。
4、 强制发送电子邮件。
5、 受控向其它网站发起攻击等。
三、跨站脚本攻击的方式与对策
XSS是一种被动式的攻击,并不容易被利用,所以技术人员在进行网站开发的过程中常常会忽略其危害性,实际上,XSS的攻击能力和破坏能力都是非常强的,因此,我们在写一些Web程序时一定要注意这一点。
跨站攻击有多种方式,由HTML语言允许使用脚本进行简单交互,入侵者便通过技术手段在某个页面里插入一个恶意HTML代码——例如记录论坛保存的用户信息(Cookie),由于Cookie保存了完整的用户名和密码资料,用户就会遭受安全损失。当然,攻击者有时也会在网页中加入一些以.JS或.VBS为后缀名的代码时,在我们浏览时,同样我们也会被攻击到。因此攻击者可以通过多种方式发起攻击,如可以通过电子邮件,QQ消息或其他途径向受害者发送一个经过精心构造的恶意的URL,当受害者在WEB浏览器中打开这个地址时,网站会显示一个页面并在受害者的计算机上执行脚本。
也就是说如果Web页面应用程序接受用户通过HTTP请求(如GET或POST)提交的输入信息,然后使用输出HTML代码在某些地方显示这些信息,但可能存在XSS漏洞。
如下面一段ASP程序就存在一定漏洞。
<body>
<%response.write request.querystring("Title")%>
</body>
我可以得交正常的参数。如:
http://网址/index1.asp?title=ABCD
那么该WEB程序将输入:
 ABCD
但如果提交非正常信息的话,如:
http://网址/index1.asp?title=<script>document.body.innerHTML="<img%20src=http://网址/images/logo.gif>"</script>
将会显示一个图片。而下面的代码:
http://网址/index1.asp?title=<script>alert('ABCD')</script>
将通过脚本产生一个消息框。
以上是最简单的两个例子,其实,攻击者利用链接可以做更多的事情。如下面两段链接:
http://网址/index1.asp?title=<script>document.body.innerHTML="<h1>Company Login</h1><form action=http://网址 method=get><p>User Name:<input type=text name=u><p>Password<input type=password name=p><input type=submit name=login></form>"; </script>
可以产生一个带用户帐号输入框及密码框的一个提交页
http://网址/index1.asp?title=<script>document.write%20( + document.cookie + );</script>
可以显示出用户的Cookies。
由于能够在生成的WEB页面中注入代码,能想到威胁有多么严重,就可以有多么严重的威胁,攻击者可以利用漏洞窃取Cookies,网站钓鱼,劫持帐号,执行者ActiveX,执行Flash内容,强迫用户下载软件,或者是对硬盘和数据采取各种操作。
要防止XSS攻击,就需要程序开发者在WEB程序开发时,非常注意XSS漏洞的检查,尤其是对用户的输入或提交的数据进行合法化检查。如用扫描法来进行合法化检测:
<%
qs=request.servervariables("query_string")
nothis=split("<script>|document.write|document.cookie","|")
errc=false
for i= 0 to ubound(nothis)
if instr(qs,nothis(i))<>0 then
errc=true
end if
next
if errc then
response.write "<script language=""javascript"">"
response.write "parent.alert('非法操作!您提交了错误的信息...');"
response.write "self.location.href='http://网址';"
response.write "</script>"
response.end
end if
response.write request.querystring("Title")
%>
</body>

关于防止XSS攻击的几个小建议:
1、应该使用HtmlEnCode之类的函数将危险的符号转换成它们的HTML表示形式。
2、使用双引号而不是单引号,这是因为HTML编码仅转义双引号。
3、强制一个代码页以限制可以使用的字符数。
4、通过正则表达式,限制一个HTML标记。
5、对于普通用户来讲,尽量不要随意打开不明链接,尤其是邮件或QQ中发来的链接,攻击者往往会通过群发的方式,发送大量欺骗信息,导致浏览者上当。

分享道
相关新闻