﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-陈于喆的技术博客-随笔分类-web安全</title><link>http://www.blogjava.net/dongbule/category/46444.html</link><description>构建高性能门户网</description><language>zh-cn</language><lastBuildDate>Wed, 13 Oct 2010 03:13:55 GMT</lastBuildDate><pubDate>Wed, 13 Oct 2010 03:13:55 GMT</pubDate><ttl>60</ttl><item><title>XSS漏洞报告</title><link>http://www.blogjava.net/dongbule/archive/2010/09/26/332983.html</link><dc:creator>陈于喆</dc:creator><author>陈于喆</author><pubDate>Sun, 26 Sep 2010 11:21:00 GMT</pubDate><guid>http://www.blogjava.net/dongbule/archive/2010/09/26/332983.html</guid><wfw:comment>http://www.blogjava.net/dongbule/comments/332983.html</wfw:comment><comments>http://www.blogjava.net/dongbule/archive/2010/09/26/332983.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dongbule/comments/commentRss/332983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dongbule/services/trackbacks/332983.html</trackback:ping><description><![CDATA[对于的用户输入搜索出现XSS漏洞的问题，主要是由于开发人员对XSS了解不足，安全的意识不够造成的。现在让我们来普及一下XSS的一些常识，以后在开发的时候，每当有用户输入的内容时，都要加倍小心。
<br />
<br />
<strong>一、什么是XSS
</strong><br />
&nbsp;&nbsp; XSS又叫CSS (Cross Site Script)
，跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码，当用户浏览该页之时，嵌入其中Web里面的html代码会被执行，从而达到恶意
用户的特殊目的。XSS属于被动式的攻击，因为其被动且不好利用，所以许多人常呼略其危害性
<br />
&nbsp;&nbsp; 在WEB2。0时代，强调的是互动，使得用户输入信息的机会大增，在这个情况下，我们作为开发者，在开发的时候，要提高警惕。
<br />
<br />
<strong>二、XSS攻击的主要途径
</strong><br />
&nbsp; 方法只是利用HTML的属性，作各种的尝试，找出注入的方法。现在对三种主要方式进行分析。
<br />
<br />
&nbsp; 第一种：对普通的用户输入，页面原样内容输出。
<br />
&nbsp;
打开http://go.ent.163.com/goproducttest/test.jsp(限公司IP),输
入：&lt;script&gt;alert('xss')&lt;/script&gt;
JS脚本顺利执行。当攻击者找到这种方法后，就可以传播这种链接格式的链接&nbsp;&nbsp;
（http://go.ent.163.com/goproducttest/test.jsp?key=JSCODE）如：http:
//go.ent.163.com/goproducttest/test.jsp?key=&lt;script&gt;alert('xss')&amp;
lt;/script&gt;，并对JSCODE做适当伪装，如：
<br />
http://go.ent.163.com/goproducttest/test.jsp?key=%3c%73%63%72%69%70
%74%3e%61%6c%65%72%74%28%27%78%73%73%27%29%3c%2f%73%63%72%69%70%74%3e,当其
它用户当点此链接的时候，JS就运行了，造成的后果会很严重，如跳去一个有木马的页面、取得登陆用户的COOKIE等。
<br />
<br />
<br />
&nbsp; 第二种：在代码区里有用户输入的内容
<br />
&nbsp; 这个已经在上次跟贴漏洞讨论会上强调过了，原则就是，代码区中，绝对不应含有用户输入的东西。
<br />
<br />
&nbsp; 第三种：允许用户输入HTML标签的页面。
<br />
&nbsp;
意思就是，用户可以提交一些自定义的HTML代码，这种情况是最危险的。因为，IE浏览器默认采用的是UNICODE编码，HTML编码可以
用&#ASCII方式来写，又可以使用"\"连接16进制字符串来写，使得过滤变得异常复杂，如下面的四个例子，都可以在IE中运行。
<br />
<br />
1，直接使用JS脚本。
<br />
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">img&nbsp;src</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">javascript:alert('xss')</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">/&gt;</span><span style="color: rgb(0, 0, 0);"> <br />
</span></div>
<br />
<br />
2，对JS脚本进行转码。
<br />
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">img&nbsp;src</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">javascript:alert('xss')</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">/&gt;</span><span style="color: rgb(0, 0, 0);"> <br />
</span></div>
<br />
<br />
3，利用标签的触发条件插入代码并进行转码。
<br />
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">img&nbsp;&nbsp;onerror</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">alert('xss')</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">/&gt;</span><span style="color: rgb(0, 0, 0);"> <br />
</span></div>
<br />
<br />
4，使用16进制来写(可以在傲游中运行)
<br />
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">img&nbsp;STYLE</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">background-image:&nbsp;\75\72\6c\28\6a\61\76\61\73\63\72\69\70\74\3a\61\6c\65\72\74\28\27\58\53\53\27\29\29</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"> <br />
</span></div>
<br />
以上写法等于
<br />
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">img&nbsp;STYLE</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">background-image:&nbsp;url(javascript:alert('XSS'))</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"> <br />
</span></div>
<br />
<br />
<strong>三、解决办法
</strong><br />
&nbsp; 最重要的一点，就是提高意识严格控制输入和输出。具体执行的方式有以下几点：
<br />
<br />
&nbsp; 第一、在输入方面对所有用户提交内容进行可靠的输入验证，提交内容包括URL、查询关键字、http头、post数据等
<br />
&nbsp; 第二、在输出方面，在用户输内容中使用&lt;XMP&gt;标签。标签内的内容不会解释，直接显示。
<br />
&nbsp; 第三、严格执行字符输入字数控制。
<br />
&nbsp; 第四、在脚本执行区中，应绝无用户输入。<br />
<br />
----------------------------------------<br />
<br />
by 陈于喆 <br />
QQ:34174409<br />
Mail: chenyz@corp.netease.com
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/dongbule/aggbug/332983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dongbule/" target="_blank">陈于喆</a> 2010-09-26 19:21 <a href="http://www.blogjava.net/dongbule/archive/2010/09/26/332983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>