<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>lizongbo at 618119.com &#187; Xss</title>
	<atom:link href="http://618119.com/tag/xss/feed" rel="self" type="application/rss+xml" />
	<link>http://618119.com</link>
	<description>工作,生活,Android,前端,Linode,Ubuntu,nginx,java,apache,tomcat,Resin,mina,Hessian,XMPP,RPC</description>
	<lastBuildDate>Tue, 31 Jan 2012 14:25:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>使用java.net.URL解析校验检查url非法字符时撞上了bug</title>
		<link>http://618119.com/archives/2010/12/07/188.html</link>
		<comments>http://618119.com/archives/2010/12/07/188.html#comments</comments>
		<pubDate>Mon, 06 Dec 2010 16:04:54 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[net]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[Xss]]></category>

		<guid isPermaLink="false">http://618119.com/?p=188</guid>
		<description><![CDATA[java.net.URL对url格式的检查不严格，如果使用java.net.URL来进行url解析并判断url是否为指定域名时将产生漏洞。 目前一共发现两种情况会解析错误： 1.java.net.URL对url里存在回车符和换行符被认为是合法的： &#60;% String goUrl=&#8221;http://618119.com/\r\nX-Location: http://www.lizongbo.com/&#8221;; //goUrl=java.net.URLEncoder.encode(goUrl, &#8220;UTF-8&#8243;); response.sendRedirect(goUrl); %&#62; 例如上面的代码即使使用java.net.URL进行解析，也能正常解析，而被认为是个合法的url。 加上reponse.setheader的时候没做参数检查，导致写入了非法的head，这样会导致XSS注入攻击。 2.&#8221;http://618119.com#www.lizongbo.com/&#8221; 这样的url被java.net.URL解析得到的host是618119.com#www.lizongbo.com，因此按域名后缀判断的话会被误放过， 在浏览器地址栏里实际请求会变成：http://618119.com/#www.lizongbo.com/ 这样也会产生非法跳转漏洞。 使用java.net.URI进行解析则不会出现这样的问题。 JDK里的关于java.net.URL里引用的文章连接 为： http://www.socs.uts.edu.au/MosaicDocs-old/url-primer.html，但是这个链接已经失效了。 因此封装下面这个工具类来对url进行检查，避免URL 参数里出现非法字符导致的非法跳转的漏洞： [code] package com.lizongbo.net; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; /** * 测试url检查是否完善的类 * @author lizongbo * */ public class UrlTest { /** * @param args * @throws MalformedURLException [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2010/12/07/188.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用CRLFFilter过滤HTTP应答头信息名称和值的非法字符防止CRLF注入攻击</title>
		<link>http://618119.com/archives/2010/11/29/189.html</link>
		<comments>http://618119.com/archives/2010/11/29/189.html#comments</comments>
		<pubDate>Mon, 29 Nov 2010 02:02:10 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[CRLF]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[header]]></category>
		<category><![CDATA[Xss]]></category>

		<guid isPermaLink="false">http://618119.com/?p=189</guid>
		<description><![CDATA[使用CRLFFilter过滤http应答中头信息名称和值的非法字符，防止CRLF注入攻击 经过测试Resin的response.addHeader方法也没做header名字和值的检查，因此如果webapp代码写法不当的话，将导致CRLF注入攻击， 例如一个页面从url参数中获取地址燃尽进行跳转，如果url地址存在“%0d%0a”编码表示的CRLF而未被检测过滤(java.net.URL解析不会出错，必须用java.net.URI才行)，将产生安漏洞。 通过下面的代码可以重现这个Xss漏洞攻击。 jsp代码： &#60;% response.addHeader(&#8220;X-Locationaaa: http://mqq.im/\r\nX-tesh&#8221;,&#8221;aaa&#8221;); response.addHeader(&#8220;X-Locationbbb: 汉字/\r\nX-teshbbb&#8221;,&#8221;aaa&#8221;); //下面的goUrl可以从URL的参数中获取，如果url地址存在“%0d%0a”编码表示的CRLF而未被检测过滤(java.net.URL解析不会出错，必须用java.net.URI才行)，将产生漏洞。 String goUrl=&#8221;http://lizongbo.com/\r\nX-Location: http://618119.com/&#8221;; //goUrl=java.net.URLEncoder.encode(goUrl, &#8220;UTF-8&#8243;); response.sendError(403,goUrl); %&#62; 在Firefox中访问jsp，使用Live HTTP headers 可以看到生成的实际head如下： HTTP/1.1 403 http://lizongbo.com/ X-Location: http://618119.com/ Server: Resin/4.0.10 X-Locationaaa: http://mqq.im/ X-tesh: aaa X-Locationbbb: 汉字 X-teshbbb: aaa Content-Type: text/html; charset=utf-8 Content-Length: 216 Date: Tue, 09 Nov 2010 02:37:48 GMT 因此封装过滤器代码如下： [code] package com.lizongbo.web.filter; import java.io.IOException; [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2010/11/29/189.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用Servlet Filter来防止Xss漏洞和SQL注入的方法</title>
		<link>http://618119.com/archives/2010/02/23/156.html</link>
		<comments>http://618119.com/archives/2010/02/23/156.html#comments</comments>
		<pubDate>Tue, 23 Feb 2010 14:32:20 +0000</pubDate>
		<dc:creator>lizongbo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Xss]]></category>

		<guid isPermaLink="false">http://618119.com/?p=156</guid>
		<description><![CDATA[使用Servlet Filter来防止Xss漏洞和SQL注入的方法 在用java进行web业务开发的时候，对于页面上接收到的参数，除了极少数是步可预知的内容外，大量的参数名和参数值都是不会出现触发Xss漏洞的字符。而通常为了避免Xss漏洞，都是开发人员各自在页面输出和数据入库等地方加上各种各样的encode方法来避免Xss问题。而由于开发人员的水平不一，加上在编写代码的过程中安全意识的差异，可能会粗心漏掉对用户输入内容进行encode处理。针对这种大量参数是不可能出现引起Xss和SQL注入漏洞的业务场景下，因此可以使用一个适用大多数业务场景的通用处理方法，牺牲少量用户体验，来避免Xss漏洞和SQL注入。 那就是利用Servlet的过滤器机制，编写定制的XssFilter，将request请求代理，覆盖getParameter和getHeader方法将参数名和参数值里的指定半角字符，强制替换成全角字符。 使得在业务层的处理时不用担心会有异常输入内容。 相关的代码如下： XssFilter.java [code] package com.lizongbo.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; public class XssFilter implements Filter { @Override public void init(FilterConfig config) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { XssHttpServletRequestWrapper [...]]]></description>
		<wfw:commentRss>http://618119.com/archives/2010/02/23/156.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

