`

java 防止xss攻击

 
阅读更多

关于xss的概念和解决方案网上很多,可以参考这个:

http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html#xsshappen

这里说下最近项目中我们的解决方案,主要用到commons-lang3-3.1.jar这个包的org.apache.commons.lang3.StringEscapeUtils.escapeHtml4()这个方法。

解决过程主要在用户输入和显示输出两步:在输入时对特殊字符如<>" ' & 转义,在输出时用jstl的fn:excapeXml("fff")方法。

其中,输入时的过滤是用一个filter来实现,

实现过程:

在web.xml加一个filter

<filter>
        <filter-name>XssEscape</filter-name>
        <filter-class>cn.pconline.morden.filter.XssFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>XssEscape</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

XssFilter 的实现方式是实现servlet的Filter接口

package cn.pconline.morden.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 filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        chain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest) request), response);
    }

    @Override
    public void destroy() {
    }
}

 关键是XssHttpServletRequestWrapper的实现方式,继承servlet的HttpServletRequestWrapper,并重写相应的几个有可能带xss攻击的方法,如:

package cn.pconline.morden.filter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

import org.apache.commons.lang3.StringEscapeUtils;

public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {

    public XssHttpServletRequestWrapper(HttpServletRequest request) {
        super(request);
    }

    @Override
    public String getHeader(String name) {
        return StringEscapeUtils.escapeHtml4(super.getHeader(name));
    }

    @Override
    public String getQueryString() {
        return StringEscapeUtils.escapeHtml4(super.getQueryString());
    }

    @Override
    public String getParameter(String name) {
        return StringEscapeUtils.escapeHtml4(super.getParameter(name));
    }

    @Override
    public String[] getParameterValues(String name) {
        String[] values = super.getParameterValues(name);
        if(values != null) {
            int length = values.length;
            String[] escapseValues = new String[length];
            for(int i = 0; i < length; i++){
                escapseValues[i] = StringEscapeUtils.escapeHtml4(values[i]);
            }
            return escapseValues;
        }
        return super.getParameterValues(name);
    }
    
}

到此为止,在输入的过滤就完成了。

 

在页面显示数据的时候,只是简单地用fn:escapeXml()对有可能出现xss漏洞的地方做一下转义输出。

复杂内容的显示,具体问题再具体分析。

 

另外,有些情况不想显示过滤后内容的话,可以用StringEscapeUtils.unescapeHtml4()这个方法,把StringEscapeUtils.escapeHtml4()转义之后的字符恢复原样。

 

 

 

 

 

分享到:
评论
3 楼 lliiqiang 2019-05-06  
主要原因还是因为html格式太复杂多变了。很难过滤所有的危险代码。还有防止id和name重名的,可以使用随机数,但是提交数据的时候后端需要确定参数名称,可以尝试使用ajax。根本原因还是数据代码不分离,即html界面与属性数据合为一体。某些地方可以使用String.fromCode动态注入数据。
富文本编辑器很麻烦,它本身就要求允许客户端传递代码,但是你如何确定这些代码是安全的?可以记录生成过程,后台还是要判断相应数据是否安全。即便是纯界面代码,你也要保证其html代码符合xml规范,从而不破坏界面结构。
2 楼 liuchongming 2016-09-12  
1 楼 zczjdyj123 2014-10-31  
    

相关推荐

    Java防止xss攻击附相关文件下载

    Java防止XSS攻击的核心策略是确保用户输入的数据在显示到网页上之前被适当地编码、转义或过滤,以防止恶意脚本被执行。XSS(跨站脚本)攻击是由于网页应用程序未能正确处理用户输入的数据,使得攻击者能够注入恶意...

    Java防止xss攻击jar包

    在Java中防止XSS攻击的关键策略包括: 1. **输入验证**:对所有用户输入进行严格检查,拒绝不符合预期格式的数据。这可以通过正则表达式、预定义的白名单或使用像xssProtect这样的库来实现。 2. **内容编码**:在...

    java 防止XSS攻击的过滤器

    java 防止XSS攻击的过滤器java 防止XSS攻击的过滤器java 防止XSS攻击的过滤器java 防止XSS攻击的过滤器java 防止XSS攻击的过滤器

    JAVA防止XSS注入,附jar包

    对于Java开发人员来说,防止XSS注入至关重要,因为这有助于确保应用程序的安全性。本篇文章将深入探讨如何使用Java来防御XSS攻击,并介绍提供的jar包以及如何应用它们。 首先,了解XSS攻击的基本原理。XSS攻击通常...

    防止XSS攻击解决办法

    防止XSS攻击是保护Web应用安全的重要一环,对于任何Web开发者来说都是必备的知识。 一、XSS攻击类型 XSS攻击主要分为三类:反射型XSS、存储型XSS和DOM型XSS。 1. 反射型XSS:攻击者通过构造恶意链接,诱使用户点击...

    XSS跨站脚本攻击在Java开发中防范的方法

    ### XSS跨站脚本攻击在Java...通过以上措施,可以在一定程度上增强Java Web应用程序对于XSS攻击的防御能力。开发者应该持续关注最新的安全动态和技术,定期更新和审查应用程序的安全策略,以应对不断变化的安全威胁。

    【PDF-XSS攻击】Java项目-上传文件-解决PDF文件XSS攻击

    PDF-XSS实例文件

    springmvc4配置防止XSS攻击的方法

    本文将详细介绍在Java开发框架Spring MVC中,如何配置防止XSS攻击的策略。在此过程中,也会提及如何对SQL注入进行防范。 在Spring MVC中防止XSS攻击的基本方法之一是通过实现过滤器来包装HttpServletRequest对象。...

    java 预防XSS攻击

    本文将深入探讨如何在Java后端进行预防XSS攻击的策略。 1. **理解XSS类型**: - **存储型XSS**:攻击者的脚本被存储在服务器上,如论坛帖子、评论等,当其他用户访问这些内容时,恶意脚本会被执行。 - **反射型...

    java防止xss注入

    **Java防止XSS注入详解** XSS(Cross-site scripting)是一种常见的网络安全漏洞,攻击者通过在网页中嵌入恶意脚本,使用户在不知情的情况下执行这些脚本,从而窃取用户信息或进行其他恶意操作。Java作为广泛应用于...

    关于pdf文件xss攻击问题,配置xssFilter方法

    在SpringBoot应用中配置XSSFilter,可以确保传入和传出的数据都经过安全处理,防止XSS攻击的发生。 配置XSSFilter通常涉及以下几个步骤: 1. 添加依赖:确保项目中已经包含了Spring Security或者类似的过滤器库,...

    SpringBoot +esapi 实现防止xss攻击 实战代码,满满干货

    ESAPI提供了一套完整的API,可以方便地对用户输入进行验证和清理,从而防止XSS攻击。例如,我们可以使用`ESAPI.encoder().encodeForHTML()`方法来转义HTML特殊字符,确保用户输入不会被浏览器解释为HTML代码。 要...

    SpringBoot +esapi 实现防止xss攻击 实战代码

    在SpringBoot项目中集成ESAPI(Enterprise Security API)可以有效地防止XSS攻击。本文将深入探讨如何在SpringBoot应用中结合springSecurity过滤器链,利用ESAPI库实现XSS防护。 首先,让我们了解ESAPI。ESAPI是一...

    防止XSS攻击xssProtect

    防止XSS攻击是保护Web应用安全的重要环节。 在Java开发环境中,有多种方法可以防御XSS攻击,其中一个就是使用开源库。在这个压缩包中包含的三个jar文件,都是与防止XSS攻击相关的: 1. antlr-3.0.1.jar:ANTLR...

    防止XSS攻击xssProtect用到的jar包

    这个主题中提到的三个jar包——antlr-3.0.1.jar、antlr-runtime-3.0.1.jar和xssProtect-0.1.jar,都是与防止XSS攻击相关的组件。 首先,`antlr-3.0.1.jar`是ANTLR(ANother Tool for Language Recognition)的一个...

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

    使用这些资源,开发者可以学习如何在实际项目中有效防止XSS攻击,提升应用程序的安全性。在分析和研究这些案例时,应重点关注代码中的输入验证、数据编码以及可能使用的安全库。同时,了解和实践案例中涉及的技术,...

    预防XSS攻击和SQL注入XssFilter

    一、什么是XSS攻击 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如...

    java web Xss及sql注入过滤器.zip

    为了防止XSS攻击,开发者通常会使用过滤器(Filter)来对HTTP请求中的输入进行清洗和转义,确保数据在展示到前端时不会执行任何恶意代码。在Spring Boot中,我们可以自定义Filter,例如实现`javax.servlet.Filter`...

    xssprotect防止XSS攻击源码

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

    xss根据白名单过滤HTML防止XSS攻击

    xss是一个用于对用户输入的内容进行过滤,以避免遭受XSS攻击的模块 (什么是XSS攻击?)。主要用于论坛、博客、网上商店等等一些可允许用户录入页面排版、 格式控制相关的HTML的场景,xss模块通过白名单来控制允许的...

Global site tag (gtag.js) - Google Analytics