`
erichi101
  • 浏览: 10066 次
文章分类
社区版块
存档分类
最新评论

xss和csrf 防御

xss 
阅读更多

 

CSRF攻击原理及防御:https://www.cnblogs.com/shytong/p/5308667.html 

 

CSRF 攻击的应对之道:https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/

 

 

 

 

拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

 

 

 

 

 

XSS

 

一个目标资源可以指定多个过滤器,过滤器的执行顺序是在web.xml文件中的部署顺序:

 

1.web.xml配置filter

 

  1.1配置要拦截的url的格式

 

  1.2配置拦截后的处理类

 

 

 

<filter>

    <filter-name>XSSFilter</filter-name>

    <filter-class>com.jd.ihotel.pc.webapp.filters.NewXssFilter</filter-class>

</filter>

<filter-mapping>

    <filter-name>XSSFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

一个filter可被多个mapping使用:

 

<filter>  

    <filter-name>authority</filter-name>  

    <filter-class>com.util.AuthorityFilter</filter-class>  

</filter>  

<filter-mapping>  

    <filter-name>authority</filter-name>  

       <url-pattern>/pages/genbill/*</url-pattern>  

</filter-mapping>  

<filter-mapping>  

    <filter-name>authority</filter-name>  

    <url-pattern>/pages/cmm/*</url-pattern>  

</filter-mapping>

2.配置依赖:

 

<dependency>

    <groupId>javax.servlet</groupId>

    <artifactId>javax.servlet-api</artifactId>

    <version>3.0.1</version>

    <scope>provided</scope>

</dependency>

新建:实现Filter类是初始化,过滤,销毁三个方法必须都实现(初始化和销毁可以是空方法,过滤方法中chain.doFilter的参数是装饰者模式的http请求对象和普通的http响应对象)

 

NewXssFilter类

过滤方法中新建一个request过滤对象(装饰者模式),以便可以对request的参数进行更改(过滤)

 

import javax.servlet.*;

import javax.servlet.http.HttpServletRequest;

import java.io.IOException;

 

public class NewXssFilter 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 NewXssHttpServletRequestWraper(

                (HttpServletRequest)request), response);//对request和response进行过滤

    }

 

    @Override

    public void destroy() {

 

    }

}

 

新建NewXssHttpServletRequestWraper类

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

 

public class NewXssHttpServletRequestWraper extends HttpServletRequestWrapper {

 

    public NewXssHttpServletRequestWraper(HttpServletRequest request) {

        super(request);

    }

 

    @Override

    public String getParameter(String name) {

        return clearXss(super.getParameter(name));

    }

 

    @Override

    public String getHeader(String name) {

        return clearXss(super.getHeader(name));

    }

    @Override

    public String[] getParameterValues(String name) {

        String[] values = super.getParameterValues(name);

        if (values == null) {

            return null;

        }

        String[] newValues = new String[values.length];

 

        for (int i = 0; i < values.length; i++) {

            newValues[i] = clearXss(values[i]);

        }

        return newValues;

    }

    /**

     * 处理字符转义

     *

     * @param value

     * @return

     */

    private String clearXss(String value) {

        if (value == null || "".equals(value)) {

            return value;

        }

        value = value

                .replaceAll("'","")

                .replaceAll("\'","")

                .replaceAll("`","")

                //.replaceAll("\"","“")

                .replaceAll("<","")

                .replaceAll(">","")

                .replaceAll("\\(","(")

                .replaceAll("\\)",")")

                //.replaceAll("&","&")

                .replaceAll("eval","")

                .replaceAll("java","")

                .replaceAll("script","")

                .replaceAll("alert","")

                .replaceAll("prompt","");

        value = value.replaceAll("eval\\((.*)\\)", "");

        value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']",

                "\"\"");

        return value;

    }

 

 

 

}

下面的代码配置的过滤器必须有吗?作用是?

<filter>

    <filter-name>XssEscape</filter-name>

    <filter-class>com.jd.ihotel.pc.webapp.filters.XssFilter</filter-class>

</filter>

<filter-mapping>

    <filter-name>XssEscape</filter-name>

    <url-pattern>/*</url-pattern>

    <dispatcher>REQUEST</dispatcher>

</filter-mapping>

 

 

也可以简答粗暴不用过滤器这么写:

 

 

 

private String stripXSS(String value) {

    if (value != null) {

        value = value.replaceAll("<", "&lt;").replaceAll(">", ">");

        value = value.replaceAll("\\(", "(").replaceAll("\\)", ")");

        value = value.replaceAll("'", "'");

        value = value.replaceAll("eval\\((.*)\\)", "");

        value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");

        value = value.replaceAll("script", "");

        value = value.replaceAll("%", "");

        value = value.replaceAll(";", "");

    }

    return value;

}

 

 

 

 

 

 

如果项目中使用了Spring框架,那么,很多过滤器都不用自己来写了,Spring为我们写好了一些常用的过滤器。下面我们就以字符编码的

过滤器CharacterEncodingFilter为例,来看一下Spring框架下,如果配置过滤器。

 

 

 

<filter>

 

<filter-name>encodingFilter</filter-name>

 

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

 

<init-param>

 

<param-name>encoding</param-name>

 

<param-value>UTF-8</param-value>

 

</init-param>

 

<init-param>

 

<param-name>forceEncoding</param-name>

 

<param-value>true</param-value>

 

</init-param>

 

</filter>

 

 

<filter-mapping>

 

<filter-name>encodingFilter</filter-name>

 

<url-pattern>/*</url-pattern>

 

</filter-mapping>

 

 

 

 

 

 

 

CSRF:访问受信网站A并在本地产生cookie,不登出A的情况访问不受信网站B(即使浏览器关闭,A的cookie不一定立即过期或会话结束)

 

http://www.cnblogs.com/shanyou/p/5038794.html

 

1.web.xml中配置springMVC:

 

<servlet>

   <servlet-name>mvc</servlet-name>

   <servlet-class>

      org.springframework.web.servlet.DispatcherServlet

   </servlet-class>

   <init-param>

      <param-name>contextConfigLocation</param-name>

      <param-value>classpath:spring-web-config.xml</param-value>

   </init-param>

   <load-on-startup>1</load-on-startup>

</servlet>

2.springMVC配置中配置拦截器

 

 <mvc:interceptors>

        <mvc:interceptor>

            <mvc:mapping path="/submitOrder.html" />

            <mvc:mapping path="/ihtrade/unpaidCancel.html"/>

            <mvc:mapping path="/ihtrade/cancel.html"/>

            <bean class="com.jd.ihtrade.core.intercepter.CheckRefferIntercepter" />

        </mvc:interceptor>

    </mvc:interceptors>

 

</beans>

 

3.新建拦截器里配置的类:

 

 

 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.net.URI;

 

public class CheckRefferIntercepter implements HandlerInterceptor{

    private Logger logger = LoggerFactory.getLogger(CheckRefferIntercepter.class);

    @Override

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws

            Exception {

        String referer = request.getHeader("referer");

        StringBuffer requestURL = request.getRequestURL();

        if(referer == null || referer.isEmpty()) {

            return false ;

        }

        try{

            if (referer.contains("?")){

                referer = referer.substring(0, referer.indexOf("?"));

            }

            URI referUri = new URI(referer);

            String domain = referUri.getHost();

            logger.info("请求目的地URL:{}来源URL:{}验证:{}",requestURL,referer,domain);

            if(domain != null){

                if(

                        domain.endsWith("360buy.com")

                        || domain.endsWith("jd.com")

                        || domain.endsWith("jd.net")

                        || domain.endsWith("jd.hk")

                        ) {

                    return true;

                }

            }

        } catch (Exception e){

            logger.error("--invalid uri--" + referer, e);

            return false ;

        }

        return false ;

    }

 

    @Override

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

 

    }

 

    @Override

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

 

    }

}

可使用拦截器验证token来避免攻击:

 

http://www.360doc.com/content/18/0223/11/31784658_731672172.shtml

 

token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 token 给前端。前端可以在每次请求的时候带上 token 证明自己的合法地位。

 

zz:https://blog.csdn.net/u010287873/article/details/80769762

 

分享到:
评论

相关推荐

    Java的各种实验包括反射,算法,多线程,面试题,springboot,shiro,valid,XSS,CSRF防御

    Java的各种实验包括反射,算法,多线程,面试题,springboot,shiro,valid,XSS,CSRF防御

    跨站攻击(XSS+CSRF).docx

    实验目的与要求 1. 能理解XSS注入原理; 2. 能应用Low等级、Medium等级、High级别的XSS; 3. 能理解XSS的修复。 4. 能从攻击者角度、受害者...4) Impossible等级的机制以及修复、防御方法。(10分) 5) 报告撰写规范程

    使用Filter针对Xss攻击,sql注入,服务器访问白名单,以及csrf进行安全校验

    主要使用Filter针对Xss攻击,sql注入,服务器访问白名单,以及csrf进行安全校验 1,主要实现的是三大块功能:Xss攻击,sql注入,服务器白名单,以及csrf 2,此Filter为真实项目部署,在XssHttpServletRequestWrapper...

    springboot后端实现防御xSRF攻击的策略代码.zip

    本包中,含有2个实现springboot后端实现防御xSRF攻击的策略代码,具体使用,还需要看您的具体场景,进行区分使用!CSRFInterceptor.java、XSRFHandlerInterceptor.java

    对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍

    二、Laravel的CSRF防御过程 Laravel 会自动在用户 session (根据session_id 关联确认属于谁) 生成存放一个随机令牌(token)放在session中,并且如果使用 Laravel 的 {{form::open}} 会自动隐藏存在 csrf_token(),...

    常见的网络安全攻击和防御方法解析

    包括sql注入、DDos攻击、XSS和CSRF等的攻击原理和防御方法。

    chengzhong1#Web#07-安全问题:CSRF和XSS1

    前言面试中的安全问题,明确来说,就两个方面:CSRF:基本概念、攻击方式、防御措施XSS:基本概念、攻击方式、防御措施这两个问题,一般不会问太难。有人问:SQL

    wjp2018#vuecss#07-安全问题:CSRF和XSS1

    前言面试中的安全问题,明确来说,就两个方面:CSRF:基本概念、攻击方式、防御措施XSS:基本概念、攻击方式、防御措施这两个问题,一般不会问太难。有人问:SQL

    PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)

    浅谈Php安全和防Sql注入,防止Xss攻击,防盗链,防CSRF 前言: 首先,笔者不是web安全的专家,所以这不是web安全方面专家级文章,而是学习笔记、细心总结文章,里面有些是我们phper不易发现或者说不重视的东西。所以...

    5分钟科普CSRF攻击与防御,Web安全的第一防线

    目录:一、CSRF介绍二、CSRF攻击的危害三、CSRF攻击原理及过程四、CSRF漏洞检测五、CSRF漏洞预防六、最后聊聊xssCSRF(Cross-siterequestforgery)跨站请求伪造,也被称为“OneClickAttack”或者SessionRiding,通常...

    前端安全:如何防止CSRF攻击?

    在移动互联网时代,前端人员除了传统的XSS、CSRF等安全问题之外,又时常遭遇网络劫持、非法调用HybridAPI等新型安全问题。当然,浏览器自身也在不断在进化和发展,不断引入CSP、Same-SiteCookies等新技术来增强安全...

    secureyournode:安全讲习班

    该研讨会将综合一般网络安全性(XSS,CSRF)和特定于javascript的陷阱(包括等等)。 这是一项正在进行中的工作,代码会很杂乱,因此,请修复它或不要抱怨!安装 npm install -g secureyournode问题XSS-攻击XSS-...

    详细介绍了PHP常见面试总结.docx绝对非常有帮助

    6. **安全问题**:SQL注入、XSS和CSRF攻击的防御,以及如何确保数据的安全性。 7. **性能优化**:如何优化PHP代码以提高性能,包括查询优化和缓存策略。 8. **框架知识**:对流行的PHP框架(如Laravel、Symfony、...

    XSS跨站脚本攻击剖析与防御(目录)

    带目录版 带目录版

    Deploying ACI.pdf

    &.10 策略配置..CSRF防御 &.11 策略配置..CC防御 &.12 策略配置..限制webshell访问 &.13 策略配置..http慢攻击防御 &.14 策略优化概述 &.15 策略优化..WAF监测白名单 &.16 策略优化..SQL注入/XSS白名单 &.17 策略...

    CSRF漏洞详细说明

    经常入选owasp漏洞列表Top10,在当前web漏洞排行中,与XSS和SQL注入并列前三。与前两者相比,CSRF相对来说受到的关注要小很多,但是危害却非常大。通常情况下,有三种方法被广泛用来防御CSRF攻击:验证token,验证...

    IMPERVA WAF 配置&优化

    &.10 策略配置..CSRF防御 &.11 策略配置..CC防御 &.12 策略配置..限制webshell访问 &.13 策略配置..http慢攻击防御 &.14 策略优化概述 &.15 策略优化..WAF监测白名单 &.16 策略优化..SQL注入/XSS白名单 &.17 策略...

    漏洞扫描工具xray+批量调用xray脚本

    Xray是一款由国内团队编写的开源Web安全测试工具,主要用于检测和利用Web应用程序中的各种漏洞,包括SQL注入、XSS、CSRF、文件包含、文件上传等。它支持多种操作系统和架构,提供了GUI界面和命令行两种使用方式。 ...

    2024最新Web安全攻防教程资料PPT大合集(143份).zip

    Web安全攻防教程资料PPT大合集,包含CSRF漏洞...CSRF漏洞防御.pptx 收集敏感信息.pptx Mysql注入有关知识点.pptx 标签属性中的XSS.pptx Git信息泄露.pptx ……等等143份PPT源文件资料,更多介绍情况资源的预览介绍。

Global site tag (gtag.js) - Google Analytics