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

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

 

分享到:
评论

相关推荐

    xss+csrf+html练习源码.rar_XSS_csrf_csrf源码_xss源码_xss练习源码

    今天,我们将通过对一个名为“xss+csrf+html练习源码.rar”的实战练习源码分析,深入了解这些攻击手段的工作原理和防御方法。 首先,XSS攻击是一种代码注入攻击,它允许攻击者在用户浏览器中执行恶意脚本。根据攻击...

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

    “XSS”(Cross-Site Scripting)和“CSRF”(Cross-Site Request Forgery)是两种常见的Web应用安全漏洞。XSS允许攻击者注入恶意脚本到网页,影响用户浏览器的行为;而CSRF则利用用户的已登录状态执行非预期的操作...

    跨站攻击(XSS+CSRF).docx

    2. 了解Impossible等级的XSS攻击机制和防御方法。 3. 从攻击者和受害者角度理解CSRF攻击,实施Low、Medium、High等级的CSRF攻击。 4. 学习并实践CSRF的修复措施,如使用CSRF Token等。 5. 撰写实验报告,注重规范性...

    基于PHP的xss平台安全监测与CSRF防御设计源码

    该项目是一款基于PHP的综合性安全监测平台,旨在应对XSS攻击和CSRF防御。源码包含299个文件,涵盖238个PHP脚本、21个HTML模板、15个CSS样式表、5个JavaScript脚本、2个文本文件、1个Git忽略文件、1个Markdown文档、1...

    前端大厂最新面试题-alibaba.docx

    在面试中,考察 XSS 和 CSRF 的防御方法,如输入验证、输出编码、使用 Token 等。 前端发展趋势 在面试中,考察对前端发展趋势的看法,如 PWA、Serverless、AI 等技术的应用前景等。 本资源涵盖了前端工程师面试...

    Web安全的三个XSS-CSRF-CLICK攻防姿

    针对XSS攻击的防御措施,主要包括对用户输入的数据进行严格的过滤和编码,如JavaScriptEncode,确保数据被插入到HTML页面时不会被当作脚本执行。 CSRF攻击同样是一种常见的Web安全问题,它利用用户的合法身份,诱导...

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

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

    基于JSP的Java Web项目的CSRF防御示例

    以上就是基于JSP的Java Web项目中实施CSRF防御的基本流程和原理。在实际项目中,需要根据具体需求和框架来调整和完善这些措施,以确保应用的安全性。通过这样的防御机制,我们可以有效地防止攻击者利用CSRF漏洞对...

    spring boot xss防御

    - 使用HTTPOnly Cookie:设置Cookie的HttpOnly属性,阻止JavaScript访问Cookie,减少CSRF(跨站请求伪造)和XSS的结合攻击。 - 启用Content Security Policy (CSP):通过配置CSP头部,限制浏览器只能加载指定来源...

    CSRF漏洞防御-01

    CSRF漏洞防御主要包括四种方法:验证码防御、Referer Check防御、Anti CSRF Token防御和Token泄露。 验证码防御 验证码防御是一种非常简单而且有效的防御方法。它可以强制用户与应用程序交互,才能最终完成操作。...

    Huddle-源码.rar

    - 安全编码实践,如输入验证、XSS 和 CSRF 防御,是确保应用安全的关键部分。 - SSL/TLS 加密确保了数据传输过程中的安全,防止中间人攻击。 - 用户数据加密,特别是在存储敏感信息如密码时,应使用哈希和盐值...

    22蓝橙简约集团运输物流全套网站交互动态模板.rar

    此外,为了保证网站的稳定运行和安全性,模板可能还考虑了代码优化、错误处理、安全防护等方面,如使用CDN加速静态资源加载,实施XSS和CSRF防御策略等。 总的来说,"22蓝橙简约集团运输物流全套网站交互动态模板"是...

    LessonControl-源码.rar

    8. **安全性与稳定性**:LessonControl 的源码会考虑安全措施,如输入验证、XSS 和 CSRF 防御,以及负载均衡和故障恢复策略,以确保系统的稳定运行。 9. **部署与运维**:考虑到生产环境的需求,LessonControl 可能...

    合工大宣百科竞赛平台ByNetcan.zip

    - XSS 和 CSRF 防御:防止跨站脚本和跨站请求伪造攻击。 - 输入验证:避免SQL注入和其他类型的安全漏洞。 6. **部署与运维**: - Docker:容器化技术,方便应用的打包和部署。 - Kubernetes/Ansible:自动化...

    shopify-development-app-源码.rar

    源码中还应考虑安全性问题,如数据加密、XSS 和 CSRF 防御。此外,为了提高性能,可能采用了缓存策略、API 调用优化和负载均衡等技术。 8. 测试与调试 了解源码中的测试框架和测试用例,可以帮助我们理解应用的...

    多商户B2B2C商城 Laravel8+Vue3.zip

    Vue 3 也有助于前端的 XSS 和 CSRF 防御。 这个项目结合了现代 PHP 和 JavaScript 技术,构建了一个多商户的电商平台,涉及的技术栈广泛,涵盖了后端服务、前端交互、数据库设计、安全策略等多个方面。

    29 中间件.pdf

    例如,使用中间件可以方便地实现访问日志记录、身份验证、请求速率限制、安全防护(如XSS和CSRF防御)等功能。 综上所述,JavaScript设计模式中的中间件概念是现代Web开发中的重要工具,它使得开发者能够更加专注于...

    大型网站架构

    确保用户数据安全是基础,涉及SSL/TLS加密、防火墙、DDoS防护、XSS和CSRF防御、输入验证等。 11. 性能监控与日志: 通过工具如Prometheus、ELK Stack(Elasticsearch、Logstash、Kibana)进行性能监控和日志分析,...

    Q版聊天软件服务器端

    7. **安全性**:包括但不限于DDoS防护、XSS和CSRF防御、输入验证、数据加密等,确保系统免受攻击。 在提供的文件中,“Q版服务器Release.rar”和“Q版聊天软件服务器端”可能包含了服务器端的源代码、构建文件或...

Global site tag (gtag.js) - Google Analytics