精华内容
下载资源
问答
  • 事情情况是这样,前段时间在工作中发现XX系统存在CSRF漏洞,我在数据包内并未看到对应Token参数,测试Refer头后发现XX系统并未对请求来源(refer)进行相关校验。我便认为此处存在CSRF漏洞并将该漏洞发送给了...

            事情的情况是这样的,前段时间在工作中发现XX系统存在CSRF漏洞,我在数据包内并未看到对应的Token参数,测试Refer头后发现XX系统并未对请求来源(refer)进行相关校验。我便认为此处存在CSRF漏洞并将该漏洞发送给了XX系统的相关负责人。

    但是过了几天后XX系统的负责人发来一份反馈邮件,邮件说他们系统做了CSRF校验但用的不是Token也不是Refer。而是如下方法:

    XX系统使用X-Uni-Csrf-Token做referer标志头校验,X-Uni-Csrf-Tokenk是服务器自定义的一个HTTP请求行;X-Uni-Csrf-Token是用户登录之后,后端服务器根据用户token等信息和用户会话绑在一起,给前端一个随机数,然后前端再次请求后端系统会带上这个随机数,后端验证此参数来判断是否为为同一域名下面的请求;X-Uni-Csrf-Token随机数随着用户会话消失而消失,用户下次登录会生成新的会话和X-Uni-Csrf-Token随机数;XX系统的会话时间默认是30分钟,进而防止csrf跨站请求伪造攻击。数据包如下:

    与XX相关人员沟通后,我对于他们这个方法的解读:

     

     

    当用户成功登陆系统后,服务器端根据用户Session等信息经过一定的算法运算生成一个随机数(即X-Uni-Csrf-Token),然后将此随机数与用户Session绑定起来发送给客户端。客户端将此随机数存储在用户内存中,之后每次用户通过点击页面功能点,由前端JS控制将此随机数从用户计算机内从中取出作为并HTTP请求行的一个参数发给服务器,服务器收到HTTP请求后会对该参数进行校验,如果请求中包括该参数并且参数值与用户绑定的值相同,则认为该请求来自用户本人操作,该HTTP请求被执行。

    简述:此例中的X-Uni-Csrf-Token相当于研发自己造的一个refer头,里面的参数为Token。服务器通过校验该参数来判断此HTTP请求是否来自用户本人操作。

    相关知识:默认情况下JS只会将用户Cookie信息从内存或本地文件中调用并往服务器。

    不足:页面不能存在XSS漏洞导致JS代码被执行。

    由于我的见识短浅,我的理解可能有所偏差,请给位看官见谅。

    展开全文
  • 解决CSRF的办法:客户端向服务器提交请求时,服务器一定要校验口令。客户端指定页面要有服务器端提供的口令 本文说一下SpringMVC如何防御CSRF(Cross-site request forgery跨站请求伪造)和XSS(Cross site script跨站...

    解决CSRF的办法:客户端向服务器提交请求时,服务器一定要校验口令。
    客户端指定页面要有服务器端提供的口令

    本文说一下SpringMVC如何防御CSRF(Cross-site request forgery跨站请求伪造)和XSS(Cross site script跨站脚本攻击)。

    说说CSRF

    CSRF来说,其实Spring3.1ASP.NET MVC3RailsDjango等都已经支持自动在涉及POST的地方添加Token(包括FORM表单和AJAX POST等),似乎是一个tag的事情,但如果了解一些实现原理,手工来处理,也是有好处的。因为其实很多人做web开发,但涉及到web安全方面的都是比较资深的开发人员,很多人安全意识非常薄弱,CSRF是什么根本没有听说过。所以对他们来说,CSRF已经是比较高深的东西了。先说说什么是CSRF?你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。CSRF一般都是利用你的已登录已验证的身份来发送恶意请求。比较著名的一个例子就是2009年黑客利用Gmail的一个CSRF漏洞成功获取好莱坞明星Vanessa Hudgens的独家艳照。其攻击过程非常简单,给该明星的gmail账户发了一封email,标题是某大导演邀请你来看看这个电影,里面有个图片:<img src="https://mail.google.com/mail?ui=2&fw=true&fwe=hacker@email.com">,结果她登录Gmail,打开邮件就默默无闻的中招了,所有邮件被转发到黑客的账号。因为当时Gmail设置转发的设置页面有漏洞,其设置方法是打开一个窗口,点击确定后实际URL是https://mail.google.com/mail?ui=2&fw=true&fwe=newMail@email.com:

     

    其实即使不是在同一个页面打开,在不同的tab打开也是一样可以通过网站登录验证的,因为受害者首先已经登录了网站,在浏览网站的过程中,若网站设置了Session cookie,那么在浏览器进程的生命周期内,即使浏览器同一个窗口打开了新的tab页面,Session cookie也都是有效的,他们在浏览器同一个窗口的多个tab页面里面是共享的(注:现在Gmail支持多个tab同时持有多个SessionID)。所以攻击步骤是,第一,受害者必须在同一浏览器窗口(即使不是同一tab)内访问并登陆目标站点;第二,这使得Session cookie有效,从而利用受害者的身份进行恶意操作。 

    再举个实际的例子,假设我们界面上有删除某一项的链接,例如:<a href="javascript:void(0)" οnclick="region_del.do?name=0000001">Delete</a>;

    其Java Spring MVC后台有个函数是删除某个item,注意是GET不是POST:

    复制代码
    @RequestMapping(value = "region_del.do", method = RequestMethod.GET)
    public String regionDel(@RequestParam String name, Locale locale)
    {
        //Delete region name=@name....
            
        return "redirect:/region.html";
    }
    复制代码

    点击界面上那个<a href="javascript:void(0)" οnclick="region_del.do?name=0000001">Delete</a>链接,就后台删除某项,看起来非常正常啊。 

    好,现在你登录你的网站,然后在另外一个tab打开这个html文件:

    复制代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>hack</title>
    </head>
    <body>
      <img src="http://localhost/testsite/region_del.do?name=0000001"/>
     </body>
    </html>
    复制代码

    发现同样被删除了某项。试想,如果是网银,你的钱已经被转账......(除了referer不一样,session cookie被利用)

     

    好了,现在 后台改成POST(写操作尽量用POST),前台界面那个删除的链接改成Form提交:

    <form action="region_del.do" method="POST">
     <input type="hidden" name="name" value="0000001">
            <input type="submit" value="Delete" />
    </form>

    看起来安全多了。OK,现在你登录你的网站,然后在另外一个tab打开这个html文件:

    复制代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title>Hack</title>
        <script>
          function steal(){
            var mySubmit = document.getElementById('steal_form');
            mySubmit.submit();
          }
        </script>
      </head>
      <body οnlοad='steal()'>
    <form id = "steal_form" method="POST" action="http://localhost/testsite/region_del.do">
       <input type="hidden" name="func" value="post">
    <input type="hidden" name="name" value="0000001">
    </form>
      </body>
    </html>
    复制代码

     

    发现同样被删除了某项。试想,如果是网银,你的钱已经被转账......

    当然,你如果前台还是用链接,但改成js,用AJAX POST提交,也是一样的效果:

     

    $.ajax({
     type: "POST",
     url:....
    });

    解决办法就是在Form表单加一个hidden field,里面是服务端生成的足够随机数的一个Token,使得黑客猜不到也无法仿照Token。 

    先写一个类,生成足够随机数的Token(注:Java的Random UUID已经足够随机了,参考这个这个) 

    复制代码
    package com.ibm.cn.web.beans;

    import java.util.UUID;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;

    /**
    * A manager for the CSRF token for a given session. The {@link #getTokenForSession(HttpSession)} should used to
    * obtain the token value for the current session (and this should be the only way to obtain the token value).
    * ***/

    public final class CSRFTokenManager {

        /**
         * The token parameter name
         */
        static final String CSRF_PARAM_NAME = "CSRFToken";

        /**
         * The location on the session which stores the token
         */
        public static final  String CSRF_TOKEN_FOR_SESSION_ATTR_NAME = CSRFTokenManager.class
                .getName() + ".tokenval";

        public static String getTokenForSession(HttpSession session) {
            String token = null;
            
            // I cannot allow more than one token on a session - in the case of two
            // requests trying to
            // init the token concurrently
            synchronized (session) {
                token = (String) session
                        .getAttribute(CSRF_TOKEN_FOR_SESSION_ATTR_NAME);
                if (null == token) {
                    token = UUID.randomUUID().toString();
                    session.setAttribute(CSRF_TOKEN_FOR_SESSION_ATTR_NAME, token);
                }
            }
            return token;
        }

        /**
         * Extracts the token value from the session
         * 
         * @param request
         * @return
         */
        public static String getTokenFromRequest(HttpServletRequest request) {
            return request.getParameter(CSRF_PARAM_NAME);
        }

        private CSRFTokenManager() {
        };

    }
    复制代码

    打开Form页面的时候在服务端生成Token并保存到Session中,例如:model.addAttribute("csrf", CSRFTokenManager.getTokenForSession(this.session));

    然后在Form中添加Hidden field: 

    <input type="hidden" name="CSRFToken" value="${csrf}" />

    然后在后台提交的时候验证token :

     

    复制代码
    @RequestMapping(value = "region_del.do", method = RequestMethod.GET)
    public String regionDel(@RequestParam String name, @RequestParam String CSRFToken, Locale locale)
        {
            if(CSRFToken == null || !CSRFToken.equals(session.getAttribute(CSRFTokenManager.CSRF_TOKEN_FOR_SESSION_ATTR_NAME).toString())){
                    logger.debug("CSRF attack detected. URL: region_edit.do");
                    return "redirect:/login.form";
            } 
                    
        //Delete region name=@name....
            
        return "redirect:/region.html";
    }
    复制代码

     

    你还可以把上面的步骤写到BaseController里面,或者写到拦截器里面,拦截所有POST请求,验证CSRF Token。这里掠过....

    如果你用AJAX POST的方法,那么后台一样,前台也要有Hidden field保存Token,然后在提交AJAX POST的时候加上该csrf参数即可。(更多csrf参考这个这个。)

     

    AJAX POST的CSRF防御

     

    首先在页面进入的时候从后台生成一个Token(每个session),放到一个Hidden input(用Spring tag或freemarker可以写) 。然后在ajax post提交的时候放到http请求的header里面:

    复制代码
        var headers = {};
        headers['__RequestVerificationToken'] = $("#CSRFToken").val();
        
        $.ajax({
            type: "POST",
            headers: headers,
            cache: false,
            url: base + "ajax/domain/delete.do",
            data: "id=123",
            dataType:"json",
            async: true,
            error: function(data, error) {},
            success: function(data)
            {
                
            }
        });
    复制代码

    然后在后台controller里面校验header里面这个token,也可以把这个函数放到baseController里面:

    复制代码
    protected boolean isValidCsrfHeaderToken() {
            if (getRequest().getHeader("__RequestVerificationToken") == null
                    || session
                            .getAttribute(CSRFTokenManager.CSRF_TOKEN_FOR_SESSION_ATTR_NAME) == null
                    || !this.getRequest()
                            .getHeader("__RequestVerificationToken")
                            .equals(session
                                    .getAttribute(
                                            CSRFTokenManager.CSRF_TOKEN_FOR_SESSION_ATTR_NAME)
                                    .toString())) {
                return false;
            }
            return true;
        }
    复制代码

     

    xss

    跨站脚本(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”。

    我们常常听到“注入”(Injection),如SQL注入,那么到底“注入”是什么?注入本质上就是把输入的数据变成可执行的程序语句。SQL注入是如此,XSS也如此,只不过XSS一般注入的是恶意的脚本代码,这些脚本代码可以用来获取合法用户的数据,如Cookie信息。



    关于xss的介绍可以看这个这个网页,具体我就讲讲Spring MVC里面的预防:

    web.xml加上:

    <context-param>
       <param-name>defaultHtmlEscape</param-name>
       <param-value>true</param-value>
    </context-param>

    Forms加上:

     

    <spring:htmlEscape defaultHtmlEscape="true" />

     

    更多信息查看OWASP页面

     

    第二种方法是手动escape,例如用户可以输入:<script>alert()</script> 或者输入<h2>abc<h2>,如果有异常,显然有xss漏洞。

    首先添加一个jar包:commons-lang-2.5.jar ,然后在后台调用这些函数:StringEscapeUtils.escapeHtml(string); StringEscapeUtils.escapeJavaScript(string); StringEscapeUtils.escapeSql(string);

    前台js调用escape函数即可。

     

    第三种方法是后台加Filter,对每个post请求的参数过滤一些关键字,替换成安全的,例如:< > ' " \ /  # & 

    方法是实现一个自定义的HttpServletRequestWrapper,然后在Filter里面调用它,替换掉getParameter函数即可。

    首先添加一个XssHttpServletRequestWrapper:

    复制代码
    package com.ibm.web.beans;

    import java.util.Enumeration;

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

    public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {  
        public XssHttpServletRequestWrapper(HttpServletRequest servletRequest) {
            super(servletRequest);
        }
        public String[] getParameterValues(String parameter) {
          String[] values = super.getParameterValues(parameter);
          if (values==null)  {
                      return null;
              }
          int count = values.length;
          String[] encodedValues = new String[count];
          for (int i = 0; i < count; i++) {
                     encodedValues[i] = cleanXSS(values[i]);
           }
          return encodedValues;
        }
        public String getParameter(String parameter) {
              String value = super.getParameter(parameter);
              if (value == null) {
                     return null;
                      }
              return cleanXSS(value);
        }
        public String getHeader(String name) {
            String value = super.getHeader(name);
            if (value == null)
                return null;
            return cleanXSS(value);
        }
        private String cleanXSS(String value) {
                    //You'll need to remove the spaces from the html entities below
            value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;");
            value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");
            value = value.replaceAll("'", "& #39;");
            value = value.replaceAll("eval\\((.*)\\)", "");
            value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
            value = value.replaceAll("script", "");
            return value;
        }

    复制代码

    然后添加一个过滤器XssFilter :

    复制代码
    package com.ibm.web.beans;

    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;  
    import javax.servlet.http.HttpServletResponse;

    public class XssFilter implements Filter {
        FilterConfig filterConfig = null;

        public void init(FilterConfig filterConfig) throws ServletException {
            this.filterConfig = filterConfig;
        }

        public void destroy() {
            this.filterConfig = null;
        }

        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            chain.doFilter(new XssHttpServletRequestWrapper(
                    (HttpServletRequest) request), response);
        }
    }
    复制代码

    最后在web.xml里面配置一下,所有的请求的getParameter会被替换,如果参数里面 含有敏感词会被替换掉:

    复制代码
      <filter>
         <filter-name>XssSqlFilter</filter-name>
         <filter-class>com.ibm.web.beans.XssFilter</filter-class>
      </filter>
      <filter-mapping>
         <filter-name>XssSqlFilter</filter-name>
         <url-pattern>/*</url-pattern>
         <dispatcher>REQUEST</dispatcher>
      </filter-mapping>
    复制代码

     (这个Filter也可以防止SQL注入攻击) 

     

    登录页面的攻击例子

    假设登录页面有个输入用户名和密码的输入框,可以有很多Xss/csrf/注入钓鱼网站/SQL等的攻击手段,例如:

     

     输入用户名 :    >"'><script>alert(1779)</script>
     输入用户名:     usera>"'><img src="javascript:alert(23664)">
     输入用户名:     "'><IMG SRC="/WF_XSRF.html--end_hig--begin_highlight_tag--hlight_tag--">
     输入用户名:     usera'"><iframe src=http://demo.testfire.net--en--begin_highlight_tag--d_highlight_tag-->

     

     

    Web安全漏洞检测工具

    推荐使用IBM Rational AppScan(IBM Rational AppScan下载、版权购买和破解、注册码自己解决)

     

    可以录制脚本,设置URL,如果网站需要登录,可以设置自动登录:

     

    检测结果还可以保持为专业的pdf检测报告 

     

     

    业界安全编程标准最佳实践

     

    http://www.cnblogs.com/Mainz/archive/2012/11/01/2749874.html

    展开全文
  • 笔者最近碰到了一种需要针对某一域名跳过spring security csrf防御机制的问题,网上找了好久也没找到可行的办法,最后还是笔者自己针对细节的检查,找到了破局的办法,下面介绍一下具体的原理和实现方法 目录一、绕...

    笔者最近碰到了一种需要针对某一域名跳过spring security csrf防御机制的问题,网上找了好久也没找到可行的办法,最后还是笔者自己针对细节的检查,找到了破局的办法,下面介绍一下具体的原理和实现方法


    一、绕过csrf防御机制的原理

    原理主要就是通过security自带的csrf可以配置对一些特定的uri不进行拦截,而这种配置可以使用/**进行对uri模糊匹配,这样就可以在特定域名的服务中给所有请求当前服务的uri加上一个特定的前缀,然后在当前服务的过滤器中对特定前缀的uri进行转发,将其转发到正确的uri上,就能绕过security自带的csrf拦截机制了。

    二、具体实现

    跨域调用的请求配置

    //伪代码--主要是展示给uri添加前缀
    HttpUtil.post(host + "/muyichen" + requestURI);
    

    服务端csrf拦截白名单配置

    // 该方法是继承自WebSecurityConfigurerAdapter类
    @Override
     protected void configure(HttpSecurity http) throws Exception {
         // 开启csrf白名单配置
         http.cors().and()
         			// 白名单
         			.csrf().ignoringAntMatchers("/muyichen/**");
     }
    

    过滤器中的转发方法

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    	HttpServletRequest request = (HttpServletRequest) servletRequest;
    	String requestURI = request.getRequestURI();
    	String suffix = "/muyichen";
    	// 如果前缀是/muyichen,表明该请求为跨域请求,需要转发到正确的地址
    	if(suffix.equals(requestURI.substring(0, suffix.length()))) {
    	    requestURI = requestURI.substring(suffix.length());
    	    request.getRequestDispatcher(requestURI).forward(servletRequest, servletResponse);
    	    return;
    	}
    	// 如果不是则跳过该过滤器
    	filterChain.doFilter(servletRequest, servletResponse);
    }
    

    三、需要注意的地方

    • 1、转发过滤器最好是最后一个执行(如果没有特别配置的话,过滤器的执行顺序是按照首字母大小来排序的),因为这样不会影响之前的过滤逻辑(转发后请求不会再走过滤链了);
    • 2、使用这个方法后,Controller头部中配置的action前缀需要注意不要和过滤器中的前缀相同,如果相同的话当前控制器中的所有接口都不会走csrf校验;
    展开全文
  • 因为正常网站存在CSRF漏洞,正常网站WEB服务器验证不够,当前网站验证方式只是验证用户session存在,那么他就是一个已经登录状态,但是没有办法保证某一次请求就是当前用户触发。 在现在一些app或者是...

    在这里插入图片描述
    当小绿登录正常网站服务器(VULNERABLE WEBSERVER),进行某些操作,操作完成之后没有退出,继续访问了另一个存在病毒的网站(MALUCIOUS WEBSUITE);

    网站的WEB服务器验证不够,存在CSRF漏洞。

    例如: 当前网站的验证方式只是验证的用户的session存在,那么他就是一个已经登录的状态,但是没有办法保证某一次请求就是当前用户触发的。
    在现在的一些app或者是网页中,在交易时会输入一个短信验证码,但是有一些网站并不是属于金额交易的,所以就并没有做这些设置,那如何阻止这种的CSRF漏洞呢。

    解决方法在网站服务器的服务端进行处理:

    1. 尽量使用POST请求
    get请求太容易被利用,攻击者可以构造一个img标签,通过图片资源嵌入恶意操作,而img又不能被过滤掉。所以接口最好限制为POST请求
    2.加入验证码
    POST请求也不是绝对安全的,攻击者可以通过内嵌框架,构建隐藏表单,当我们访问这个网站时候,就自动将这个表单提交了,从而造成了一次CSRF的攻击。所以这时候我们可以采用加入验证码的方式,因为攻击者所构造出来的就是伪的请求,所以在某一次提交时候,让用户提交验证码,或者滑块验证,能够确保这是一次用户的行为,而非黑客行为。
    3.验证Referer
    http头存在一个字段Referer,它能够记录当前一次请求的来源地址。什么意思呢,当我们访问正常网站时候,调用了某个接口例如192.108.12.88/transferxxxxx ------>而攻击者构造的伪请求地址113.132.44.53/gg.html 由于攻击者对正常网站实施CSRF攻击他只能在自己的站点里面进行构造请求,所以当Referer传过来是跟当前网站不同的域名,经过后端判断,如果Referer的值不是当前的网页就拒绝此次请求。
    4.Anti CSRF Token
    CSRF攻击之所以能够成功,主要是因为黑客能够完全伪造用户的请求,在这次请求中,用户的信息是存在cookie中的,所以黑客可以在不知道这些验证信息的情况下直接利用用户的cookie去跳过安全认证,我们要防御CSRF关键在于请求放入的时候黑客不能去伪造信息,并且这个信息不存在cookie之中,所以我们就可以在通过http的请求中或者是头信息中加入一个随机产生的token,这个token就会存在服务端,通过拦截器去验证这个token,如果请求头中不存在token或者token不正确,拦截器就会认为这是一次CSRF攻击,拒绝此次请求。
    5.加入自定义head
    跟第四中方法类似,但是这种方法是在header里进行传输的,自定义的header也可以产生随机的token
    总结:

    • 一般token放在head区域,或者from表单中。放在head区域中,使用js调取比较方便。

    • 每次刷新网页,token也会随之刷新。服务端生成的token的值之后,存放在session中或者放在redis缓存中。使用完销毁。

    • CSRF这种攻击方式,是黑客利用了我们登录的状态,在我们已经登录的网站里面错做一些隐私的或者敏感的功能;大部分人会选择第二中方式去防御CSRF攻击,在防御时,一定要确保token的保密性和随机性。
      在这里插入图片描述

    展开全文
  • CSRF防御方案调研结果

    2020-04-24 16:31:50
    场景模拟 用户在登录B站前提下,点击了黑客送给它A站链接。...防御办法: 阻止不可信外域访问 检验Origin、Referrer这两个HTTP Header 在大多数情况下,浏览器在发送请求时会携带它们,...
  • 今天松哥来和大家简单看一下 Spring Security 中,CSRF 防御源码。 本文是本系列第 19 篇,阅读本系列前面文章有助于更好理解本文: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,...
  • 用户是通过浏览器来访问web server上网页,XSS攻击就是攻击者通过各种办法,在用户访问网页中插入自己脚本,让其在用户访问网页时在其浏览器中进行执行。攻击者通过插入脚本执行,来获得用户信息,比如...
  • CSRF】拦截referer应对方法

    千次阅读 2014-03-29 16:45:32
    很多处理CSRF的方案都是对referer做...绕过这种防御的办法有两种: 1.function json(o){alert(o.nick);}">2.https-->http 以上两种请求方式都不会带referer,这样就能实现jsonhijacking等攻击了。 防御这两种攻
  • Django需要csrftoken来进行CSRF的防御 既然是前后端都自己写,肯定不能整@csrf_exempt这样的办法 JS用正则表达式获取cookie var regex = /.*csrftoken=([^;.]*).*$/ ; var xCSRFToken = document.cookie.match(regex)...
  • csrf-跨站请求伪造

    2018-07-13 15:25:39
    CSRF防御通过 referer、token 或者 验证码 来检测用户...Django解决办法原理Django使用专门中间件(CsrfMiddleware)来进行CSRF防护。具体原理如下:它修改当前处理请求,向所有 POST 表单增添一个隐藏...
  • 关于CSRF攻击,发现一篇不错文章,总记得比较到位,有例子,有防御办法,转载之。 一.CSRF是什么?  CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding...
  • 学习记录-CSRF跨站伪造请求 注:本文仅学术交流,不做其它用途 1.实质:就是浏览器在未关闭情况下是...实质:简单说就是新增一个字段token,用来验证访问者身份,csrf是利用浏览器自动填充没有办法提前确定token
  • 解决办法:验证 JSONP 调用来源(Referer),服务端判断 Referer 是否是白名单,或者部署随机 Token 来防御;避免敏感接口使用 JSONP 方法。 XSS 漏洞 不严谨 content-type 导致 XSS 漏洞,如果没有严格定义好...
  • 快到国庆了而且今年又是60周年,各个政府网站也都开始对网站安全、漏洞进行大规模扫描,很不幸我们公司开发一个...最近一直都在研究XSS攻击如何防范,由于研究时间不长简单总结了下防御办法。 如下表单...
  • 1. CSRF (cross-site request forgery)跨站请求伪造 一句话概括: 当用户浏览器同时打开危险网站和正常网站,危险网站利用图片隐藏链接,或者js文件操纵...根本原因:web隐式身份验证机制解决办法: 为每一个...
  • token只要是用来防御csrf(跨站请求攻击),但无法防止暴力破解。因为当将随机产生token参数加入到请求包中时。每次请求攻击者只能够盗取到被攻击这cookice而不能伪造当次请求token,这是因为token是由服务器...
  • web前端安全总结

    2021-03-01 17:23:27
    文章目录1 CSRF跨站请求伪造攻击原理防御措施2 XSS跨域脚本攻击XSS攻击原理XSS防御措施3 URL跳转漏洞防御措施4 iframe安全隐患问题解决办法 1 CSRF跨站请求伪造 CSRF(Cross-site request forgery)跨站请求伪造,是...
  • 上一节讲到了渗透测试中xss跨站攻击检测方法和防护,这一节也是关于跨站攻击的另一个手法CSRF,很多客户找到我们Sinesafe想要了解更多的跨站攻击检测方法以及防御此类攻击的办法,想要让网站的安全性更加坚固,对此提醒...
  • HTTP 缺点 明文传输,内容可能会被窃听 ...无法防御的 XSS 和 CSRF 攻击 运营商 DNS 劫持 局域网劫持 不验证通信方身份就可能遭遇伪装 无法证明报文完整性,可能已遭篡改 解决办法 使用 HTTPS 加密协议。 H
  • JSON Hijacking漏洞

    千次阅读 2014-05-04 09:11:05
     CGI以JSON形式输出数据,黑客控制第三方站点以CSRF手段强迫用户浏览器请求CGI得到JSON数据,黑客可以获取敏感信息   漏洞检测  使用工具获取json数据。 漏洞修复  可使用以下任意办法防御JSON ...
  • PS:由于作者还在学习github用法,命令行受速度限制总报错,这里采用手动创建文件夹并添加文件办法,醉了!同时,Wireshark和BurpSuite、虚拟机较大,暂未上传,待作者认真学习之后更新。同时,后续作者会陆续将...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

防御csrf的办法