`

web安全漏洞之三——csrf攻击

 
阅读更多

1. 什么是CSRF? 

      CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

 

2. CSRF漏洞的危害?

        你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。

 

3. CSRF攻击的原理?

    攻击通过在授权用户访问的页面中包含链接或者脚本的方式工作。CSRF是一种依赖web浏览器的、被混淆过的代理人攻击(deputy attack)。


 

 

4. 如何防止CSRF攻击?

     服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数作为token。

 

具体实现方法:

 在客户端页面里加上:

<script type="text/javascript">
		(function(){
			function csrfSafeMethod(method) {
			  // these HTTP methods do not require CSRF protection
			  return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
			}
			function b(a){return a?(a^Math.random()*16>>a/4).toString(16):([1e16]+1e16).replace(/[01]/g,b)};
			var csrftoken = b();
			Cookies.set('CSRF-TOKEN', csrftoken, { expires: 7 });
			jQuery.ajaxSetup({
			  beforeSend: function(xhr, settings) {
			    if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
			      xhr.setRequestHeader("X-CSRF-Token", csrftoken);
			      }
			  }
			});
		})();
    </script>

 服务端过滤器:

package com.comp.sip.web.csrf;

import javax.servlet.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

import com.comp.sip.SipHelper;

import java.io.IOException;
import java.util.regex.Pattern;

public class CsrfFilter implements Filter {

    private static final String CSRF_TOKEN = "CSRF-TOKEN";
    private static final String X_CSRF_TOKEN = "X-CSRF-TOKEN";
    private RequestMatcher requireCsrfProtectionMatcher = null;
    private static String ALLOWEDMETHOD = "GET|HEAD|TRACE|OPTIONS";

    public void init(FilterConfig filterConfig) throws ServletException {
        String ams = filterConfig.getInitParameter("allowed");
        if (ams != null || ams.trim().length() > 0)
            ALLOWEDMETHOD = ams;
        requireCsrfProtectionMatcher = new CustomRequiresCsrfMatcher(ALLOWEDMETHOD);
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        if (request instanceof HttpServletRequest) {

        } else {
            throw new IOException();
        }
        HttpServletRequest hsr = (HttpServletRequest) request;
        if (requireCsrfProtectionMatcher.matches(hsr)) {
                String csrfTokenValue = hsr.getHeader(X_CSRF_TOKEN);
                if (csrfTokenValue == null || csrfTokenValue.trim().length() == 0)
                    csrfTokenValue = hsr.getParameter(X_CSRF_TOKEN);
                final Cookie[] cookies = hsr.getCookies();
                String csrfCookieValue = null;
                if (cookies != null) {
                    for (Cookie cookie : cookies) {
                        if (cookie.getName().equals(CSRF_TOKEN)) {
                            csrfCookieValue = cookie.getValue();
                        }
                    }
                }
                if (csrfTokenValue == null || !csrfTokenValue.equals(csrfCookieValue)) {
                                  return;
                }
            }
        }
        chain.doFilter(request, response);
    }

    public void destroy() {
    }

    public static final class DefaultRequiresCsrfMatcher implements RequestMatcher {
        private final Pattern allowedMethods = Pattern.compile("^(GET|HEAD|TRACE|OPTIONS)$");

        public boolean matches(HttpServletRequest request) {
            return !allowedMethods.matcher(request.getMethod()).matches();
        }
    }

    public static final class CustomRequiresCsrfMatcher implements RequestMatcher {

        private final Pattern allowedMethods;

        public CustomRequiresCsrfMatcher(String allowed) {
            allowedMethods = Pattern.compile("^(" + allowed + ")$");
        }

        public boolean matches(HttpServletRequest request) {
            return !allowedMethods.matcher(request.getMethod()).matches();
        }
    }

    public interface RequestMatcher {
        public boolean matches(HttpServletRequest request);
    }
}

 然后在web.xml里配置过滤器:

          <filter>
	    <filter-name>XsrfFilter</filter-name>
	    <filter-class>com.comp.sip.web.csrf.CsrfFilter</filter-class>
	    <init-param>
	        <description>不需要进行csrf防御的http method</description>
	        <param-name>allowed</param-name>
	        <param-value>GET|HEAD|TRACE|OPTIONS</param-value>
	    </init-param>
	 </filter>
	 <filter-mapping>
	     <filter-name>XsrfFilter</filter-name>
	     <url-pattern>/message/replyMsg.do</url-pattern>
	 </filter-mapping>

 

结果:



 

 

  • 大小: 513.3 KB
  • 大小: 80 KB
  • 大小: 10.9 KB
分享到:
评论

相关推荐

    Web安全实验环境——WebGoat

    WebGoat是一个专门为网络安全教育设计的实验环境,它是一个开源的Web应用,旨在帮助学习者理解和防御各种Web应用程序安全漏洞。这个项目由OWASP(开放网络应用安全项目)发起,是一个广泛使用的教学平台,用于教授...

    SCWCD之路——Web应用的安全性

    本篇文章将探讨“SCWCD之路——Web应用的安全性”,并结合提供的文件`catalina.jar`和`tomcat-juli.jar`,深入讲解相关的安全知识点。 首先,让我们理解`catalina.jar`和`tomcat-juli.jar`。这两个文件都是Apache ...

    斯坦福大学web安全教程

    【斯坦福大学Web安全教程】是一系列深入探讨网络安全性的重要教育资源,由世界知名学府——斯坦福大学提供。这个教程全面覆盖了Web安全的基础到高级主题,旨在帮助学生和专业人士理解并应对日益复杂的网络安全挑战。...

    WEB渗透——新手入门之初级工具利用

    2. **漏洞扫描**:接下来是漏洞扫描,使用工具如Nessus、OpenVAS、Burp Suite的Scanner模块等,可以自动检测出常见的安全漏洞,如SQL注入、XSS跨站脚本、CSRF跨站请求伪造等。 3. **SQL注入**:这是Web应用中最常见...

    WEB安全渗透课程ppt

    【WEB安全渗透课程】是针对网络安全领域中的一个重要分支——Web应用程序的安全性进行深入探讨的教程。这门课程基于"CISP-PT"(Certified Information Security Professional - Penetration Testing)认证教材,旨在...

    web安全超实用超文档

    在IT行业中,Web安全是至关重要的领域,它涵盖了保护网络应用程序免受恶意攻击的各种技术和实践。Web安全超实用超文档提供了深入浅出的讲解,帮助读者理解和应对这一领域的常见威胁。下面,我们将详细探讨标签中提及...

    预防XSS攻击和SQL注入XssFilter

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

    Collabtive系统跨站请求伪造攻击实验-内含源码以及设计说明书(可以自己运行复现).zip

    总的来说,这个实验旨在提高你对Web安全的理解,特别是CSRF攻击的风险和防护措施。通过实际操作,你不仅能掌握Collabtive系统的运作,还能提升对Web应用安全性的敏锐度,这对于任何IT专业人员来说都是非常宝贵的技能...

    Web安全专项技术培训.rar

    Web安全专项技术培训是针对网络安全领域中的一个重要方向——Web应用安全进行深入学习和探讨的专题。Web应用在现代社会中无处不在,从电子商务、社交媒体到公共服务,都离不开Web技术的支持。然而,随着Web应用的...

    WEB安全测试实战.rar

    其次,Web安全测试涵盖多个方面,如输入验证、SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)、文件包含漏洞、会话管理、访问控制等。书中将详细解释这些常见攻击手段的工作原理,并提供相应的防护措施。例如,...

    vulstudy-master.zip

    《深入剖析Web安全漏洞研究——基于vulstudy-master.zip》 在网络安全领域,Web应用的安全性至关重要。"vulstudy-master.zip"是一个专门用于Web安全漏洞研究的资源包,它包含了一系列模拟真实环境的Web应用漏洞场景...

    西普WEB大部分题解

    总的来说,"西普WEB大部分题解"是一个非常宝贵的资源,它涵盖了Web安全的多个层面,包括但不限于SQL注入、XSS跨站脚本、CSRF跨站请求伪造、文件包含漏洞、命令注入等常见Web漏洞。通过深入学习和实践这些题解,不仅...

    Web Security / web security / anquan / AppCodeScan / Burp Suite / openvas

    "web security / anquan"进一步强调了对Web应用安全的关注,"AppCodeScan"可能是指一种用于检测应用代码安全漏洞的工具,它可以帮助开发者在编码阶段就发现潜在的安全问题。 "Burp Suite"是一款广泛使用的Web应用...

    永安在线鬼谷实验室——业务安全蓝军测评标准.pdf

    描述中提到的“在线互动安全漏洞方法论和标准”可能包含了对在线业务流程中存在的安全隐患的分析方法以及相应的安全标准。这些方法论和标准可能是基于实际的业务场景设计的,能够帮助企业更好地理解自己的安全漏洞...

    Web 应用程序安全:现代 Web 应用程序的利用和对策(2024年,英文版)

    书中通过三大支柱——侦察、进攻和防御,系统性地介绍了 Web 应用程序安全的各个方面。 首先,侦察支柱(Pillar 1: Recon)关注的是远程映射和记录 Web 应用程序的技术。这一部分详细讲解了如何收集安全敏感的配置...

    Web应用安全:Cookie参数越权.pptx

    在本文中,我们将深入探讨一个特定的安全威胁——Cookie参数越权,这是一种允许攻击者非法访问与他们拥有相同权限的用户资源的攻击方式。 1. **水平越权** 水平越权发生在系统没有对不同用户的数据进行细分或校验...

    代码审计资料整理——新手学习

    "二次漏洞审计.pdf",这可能是关于二次漏洞或依赖性漏洞的审计,即由第三方库或组件引入的安全问题。对二次漏洞的审计要求开发者不仅要关注自己的代码,还要关注所使用的开源组件的安全性。 "LAMP安全审计之PHP代码...

Global site tag (gtag.js) - Google Analytics