`

XSS之xssprotect

阅读更多
参考资料
1 跨网站脚本 http://zh.wikipedia.org/wiki/XSS
2 http://code.google.com/p/xssprotect/
一 跨网站脚本介绍
     跨网站脚本(Cross-site scripting,通常简称为XSS或跨站脚本或跨站脚本攻击)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java, VBScript, ActiveX, Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
二 常用的XSS攻击手段和目的
  盗用 cookie ,获取敏感信息。
利用植入 Flash ,通过 crossdomain 权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
利用 iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
  利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
  在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果。
三 漏洞的防御和利用
避免XSS的方法之一主要是将用户所提供的内容进行过滤,许多语言都有提供对HTML的过滤:

    PHP的htmlentities()或是htmlspecialchars()。
    Python的cgi.escape()。
    ASP的Server.HTMLEncode()。
    ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library
    Java的xssprotect(Open Source Library)。
    Node.js的node-validator。
四 xssprotect
在Eclipse中通过svn检出项目源地址:http://xssprotect.googlecode.com/svn/trunk/如下图

通用使用方式:http://code.google.com/p/xssprotect/wiki/HowTouse
package com.xss.example;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

import com.blogspot.radialmind.html.HTMLParser;
import com.blogspot.radialmind.html.HandlingException;
import com.blogspot.radialmind.xss.XSSFilter;

public class XSSTest {

	public static void main(String[] args) {
		String html = "<html><head> <title> New Document </title> " +
				"<script type='text/javascript'>  alert('dddd');   </script> " +
				"</head> <body>" +
				"222 <iframe  src='www.google.com'/>  1111" +
				"<embed ></embed>" +
				"<link>ddd</link>" +
				"</body></html>";
		String v = protectAgainstXSS(html);
		System.out.println(v);

	}
	
	public static String protectAgainstXSS( String html ) {
	    StringReader reader = new StringReader( html );
	    StringWriter writer = new StringWriter();
	    String text = null;
	    try {
	        // Parse incoming string from the "html" variable
	        HTMLParser.process( reader, writer, new XSSFilter(), true );
	        // Return the parsed and cleaned up string
	        text =  writer.toString();
	    } catch (HandlingException e) {
	        // Handle the error here in accordance with your coding policies...
	    }finally{
	    	try {
				writer.close();
				reader.close();
			} catch (IOException e) {				
				e.printStackTrace();
			}	    	
	    }
	    return text;
	}
}

在它的源代码中有二个类需要关注下:
BaseTestCase.java
public abstract class BaseTestCase extends TestCase {
	protected void testExecute( String html, String result ) {
		StringReader reader = new StringReader( html );
		StringWriter writer = new StringWriter();
		
		try {
			HTMLParser.process( reader, writer, new XSSFilter(), true );
			String buffer = new String( writer.toString() );
			System.out.println( buffer );
			assertEquals( result, buffer );
		} catch (HandlingException e) {
			e.printStackTrace();
			fail( e.getMessage() );
		}
	}
}

XSSFilter.java
/**
 * Copyright 2008 Gerard Toonstra
 *
 * As an exception, this particular file 
 * in the project is public domain to allow totally
 * free derivations of this code.
 * 
 */

package com.blogspot.radialmind.xss;

import java.util.HashSet;
import java.util.Set;

import com.blogspot.radialmind.html.IHTMLFilter;

/**
 * Implementation of a relatively simple XSS filter. This implementation removes
 * dangerous tags and attributes from tags. It does not verify the validity of 
 * URL's (that may contain links to JavaScript for example). It does not remove all
 * event handlers that may still contain XSS vulnerabilities. 
 * 
 * Embedded objects are removed because those may contain XSS vulnerabilities in 
 * their own scripting language (ActionScript for Flash for example).
 * 
 * Feel free to derive your own implementation from this file.
 * 
 * @author gt
 *
 */
public class XSSFilter implements IHTMLFilter {
	
	private static final Set<String> FORBIDDEN_TAGS = new HashSet<String>();
	
	// The tags to be removed. Case insensitive of course.
	static {
		FORBIDDEN_TAGS.add( "script" );
		FORBIDDEN_TAGS.add( "embed" );
		FORBIDDEN_TAGS.add( "object" );
		FORBIDDEN_TAGS.add( "layer" );
		FORBIDDEN_TAGS.add( "style" );
		FORBIDDEN_TAGS.add( "meta" );
		FORBIDDEN_TAGS.add( "iframe" );
		FORBIDDEN_TAGS.add( "frame" );
		FORBIDDEN_TAGS.add( "link" );
		FORBIDDEN_TAGS.add( "import" );
		FORBIDDEN_TAGS.add( "xml" );
	}
	
	/**
	 * This function is called to determine if an attribute should be filtered or not.
	 * 
	 * @param tagName	The name of the tag the attribute belongs to
	 * @param attrName	The name of the attribute to be filtered
	 * @param attrValue	The value of the attribute
	 */
	public boolean filterAttribute(String tagName, String attrName, String attrValue) {
		if ( attrName.toLowerCase().startsWith( "on" )) {
			return true;
		}
		
		return isScriptedAttributeValue( attrValue );
	}

	/**
	 * 	This method is called to determine if a tag should be filtered
	 * 
	 * @param tagName	The name of the tag that was parsed
	 */
	public boolean filterTag(String tagName) {
		if ( FORBIDDEN_TAGS.contains( tagName )) {
			return true;
		}
		return false;
	}

	/**
	 * This method is called to modify attribute values, if required
	 * 
	 * @param tagName	The name of the tag the attribute belongs to
	 * @param attrName	The name of the attribute within the tag
	 * @param attrValue		The value of the attribute
	 */
	public String modifyAttributeValue(String tagName, String attrName, String attrValue) {
		return attrValue;
	}

	/**
	 * This method is called to be able to modify the text of a node.
	 * 
	 * @param tagName	The name of the tag where the text is part of.
	 * @param text		The value of the text within the tagnode (within <tag>...</tag>)
	 */
	public String modifyNodeText(String tagName, String text) {
		return text;
	}
	
	/**
	 * Private method that determines if an attribute value is scripted
	 * (potentially loaded with an XSS attack vector).
	 * 
	 * @param attrValue	The value of the attribute
	 * @return "true" if the attribute is scripted. "false" if not.
	 */
	private boolean isScriptedAttributeValue( String attrValue ) {
		attrValue = decode( attrValue );
		attrValue = attrValue.trim().toLowerCase();

		if ( attrValue.contains( "javascript:" )) {
			return true;
		}
		if ( attrValue.contains( "mocha:" )) {
			return true;
		}
		if ( attrValue.contains( "eval" )) {
			return true;
		}
		if ( attrValue.contains( "vbscript:" )) {
			return true;
		}
		if ( attrValue.contains( "livescript:" )) {
			return true;
		}
		if ( attrValue.contains( "expression(" )) {
			return true;
		}
		if ( attrValue.contains( "url(" )) {
			return true;
		}
		if ( attrValue.contains( "&{" )) {
			return true;
		}
		if ( attrValue.contains( "&#" )) {
			return true;
		}
		return false;
	}
	
	/**
	 * Private method to remove control characters from the value
	 * 
	 * @param value	The value being modified
	 * @return	The value free from control characters
	 */
	private String decode( String value ) {
		value = value.replace("\u0000", "" );
		value = value.replace("\u0001", "" );
		value = value.replace("\u0002", "" );
		value = value.replace("\u0003", "" );
		value = value.replace("\u0004", "" );
		value = value.replace("\u0005", "" );
		value = value.replace("\u0006", "" );
		value = value.replace("\u0007", "" );
		value = value.replace("\u0008", "" );
		value = value.replace("\u0009", "" );
		value = value.replace("\n", "" );
		value = value.replace("\u000B", "" );
		value = value.replace("\u000C", "" );
		value = value.replace("\r", "" );
		value = value.replace("\u000E", "" );
		value = value.replace("\u000F", "" );
		value = value.replace("\u0010", "" );
		value = value.replace("\u0011", "" );
		value = value.replace("\u0012", "" );
		value = value.replace("\u0013", "" );
		value = value.replace("\u0014", "" );
		value = value.replace("\u0015", "" );
		value = value.replace("\u0016", "" );
		value = value.replace("\u0017", "" );
		value = value.replace("\u0018", "" );
		value = value.replace("\u0019", "" );
		value = value.replace("\u001A", "" );
		value = value.replace("\u001B", "" );
		value = value.replace("\u001C", "" );
		value = value.replace("\u001D", "" );
		value = value.replace("\u001E", "" );
		value = value.replace("\u001F", "" );
		return value;
	}
}

通过这个过滤就知道它要做什么了
上传包吧,方便
  • 大小: 79.9 KB
分享到:
评论
2 楼 kingtoon 2016-06-23  
1 楼 fqsang 2014-01-16  

相关推荐

    防止XSS攻击xssProtect用到的jar包

    为了防御XSS攻击,开发者通常会采用各种策略和工具,其中就包括"XssProtect"这样的库。这个主题中提到的三个jar包——antlr-3.0.1.jar、antlr-runtime-3.0.1.jar和xssProtect-0.1.jar,都是与防止XSS攻击相关的组件...

    防止XSS攻击xssProtect

    3. **xssProtect-0.1.jar**:这是XSSProtect的核心库,包含了处理和阻止XSS攻击的类和方法。它可能提供了诸如HTML实体编码、黑名单过滤、白名单验证等机制,以确保输入数据的安全性。 使用XSSProtect时,开发者可以...

    防止XSS攻击xssProtect用到的jar包(antlr-3.0.1,antlr-runtime-3.0.1,xssProtect-0.1)

    总之,防止XSS攻击是一个多层面的过程,`xssProtect`、ANTLR等相关工具可以帮助开发者减轻这一风险,但同时也需要配合良好的编程习惯和全面的安全策略来确保应用的安全。通过理解和正确使用这些库,我们可以构建更加...

    xssprotect防止XSS攻击源码

    针对这种威胁,开发人员通常会采取一些防御措施,其中“xssprotect”就是一种用于防止XSS攻击的解决方案。以下将详细讲解“xssprotect防止XSS攻击源码”的相关知识点。 首先,XSSProtect通常会采用过滤器(Filter)...

    xssProtect-0.1.zip

    **XSSProtect-0.1.zip** 是一个由谷歌开源的代码库,专门设计用于防止跨站脚本(XSS)攻击。XSS攻击是一种常见的网络安全威胁,它允许恶意用户在受害者的浏览器上执行有害代码,从而窃取敏感信息、操控用户行为或...

    java的xxsProtect过滤xss

    Java的XXSProtect是一个用于防御跨站脚本(Cross-Site Scripting,简称XSS)攻击的工具。XSS攻击是一种常见的网络安全问题,攻击者通过注入恶意脚本,利用用户浏览器执行,从而窃取用户的敏感信息,如cookies、登录...

    xssProtect-0.1.jar

    xssProtect-0.1.jar 谷歌开源代码工具 、 用于XSS攻击

    xssProtect源码

    XSSProtect是一个用于防止跨站脚本攻击(Cross-Site Scripting,简称XSS)的工具或库。XSS攻击是网络安全领域常见的一种攻击方式,攻击者通过注入恶意脚本到网页中,使得用户在浏览网页时执行这些脚本,从而获取敏感...

    javaweb配置xssproject,完美解决安全检测报XSS漏洞

    而`xssProtect-0.1.jar`则是XSSProject的主要库文件,包含了所有XSS防护的实现。 配置XSSProject的步骤大致如下: 1. **添加依赖**:将`xssProtect-0.1.jar`和其他必要的依赖(如ANTLR库)加入到项目的类路径中,...

    JAVA防止XSS注入,附jar包

    3. **使用安全的库**:`xssProtect` jar包提供了一种处理XSS的解决方案。这个库可能包含了预定义的过滤器,用于自动清除或转义可能导致XSS的特殊字符。 4. **Filter过滤器**:在`web.xml`配置文件中,可以定义一个...

    javaxss必备jar包及过滤器代码

    通过使用像`xssProtect-0.1.jar`这样的库,配合自定义的过滤器代码,我们可以有效地减少XSS攻击的风险,保护用户的浏览器免受恶意脚本的侵害。确保在开发过程中遵循最佳实践,定期更新防护库,并进行安全测试,将有...

    Java防止xss攻击jar包

    为了解决这个问题,开发者可以使用特定的库和工具来防止XSS攻击,如在给定的压缩包中包含的"antlr-runtime-3.0.1.jar"和"xssProtect-0.1.jar"。 `antlr-runtime-3.0.1.jar`是ANTLR(ANother Tool for Language ...

    java之XSS 漏洞原理与实际案例介绍

    Java 中的 XSS 漏洞,包括其原理、简单的 Java 代码示例、修复方案以及 CVE 实例,希望对初入Java代码审计的朋友有所帮助官网更新到了v1.4的版本,但是取消了开源。因此没法看官网怎么修复的,这里给出自己的修复...

    xssProject所需jar包

    6. **易于集成**:xssProject作为Java库,可以轻松地与现有的Web应用程序集成,只需添加相应的JAR包(如"xssProtect")到项目类路径中,然后调用其API即可启用防护功能。 7. **可定制性**:开发者可以根据自己的...

    java方面xss跨站脚本

    工具:xss-html-filter-master的源码 书籍:XSS跨站脚本攻击剖析与防御(完整版) 所需jar: antlr-3.0.1.jar antlr-runtime-3.0.1.jar xssProtect-0.1.jar

    java防止xss注入.rar 附案例及jar包

    XSS(Cross Site Scripting)攻击是Web应用中常见的安全问题之一,主要表现为攻击者通过在网页中插入恶意脚本,使用户在不知情的情况下执行这些脚本,从而获取用户的敏感信息或者破坏网站的正常功能。Java防止XSS...

    xssProject 所需的三个 jar 包

    针对 XSS 攻击的解决方案,个人建议使用 xssProject 来解决这一问题。毕竟 xssProject 已经提供了很完善的过滤、处理方案,你可以通过研究他的代码来进行扩展,如果需要的话。 xssProject 所需的三个 jar 包。

    xssProject在java web项目中应用

    描述中的链接指向了一个博客文章,虽然具体内容没有提供,但可以推测该文章可能详细介绍了如何使用名为"xssProtect-0.1.jar"的库来防御XSS攻击。这个库可能是开发者编写的或者是一个开源项目,用于帮助Java Web应用...

    JAVA项目实践,URL存在跨站漏洞,注入漏洞解决方案.docx

    - **Java**:`xssprotect` (开源库) - **Node.js**:`node-validator` 此外,还可以通过对输入的数据进行严格的验证来减少XSS的风险,例如使用正则表达式检查数据格式是否正确。 #### 四、解决方案示例 本文档...

Global site tag (gtag.js) - Google Analytics