美文网首页前端面试题
day08-前端面试技巧-(安全类)

day08-前端面试技巧-(安全类)

作者: 东邪_黄药师 | 来源:发表于2019-03-10 11:37 被阅读10次
    CERF:

    基本概念和缩写:
    CSRF(Cross-site request forgery)跨站请求伪造缩写CSRF

    • 攻击原理:


      image.png

    此时网站A在接收到请求之后已经判断当前用户是登录状态,所以恶意网站就可以根据用户的权限做具体的恶意操作了,造成网站攻击成功。
    而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookie
    用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数
    用户C访问正常网站A时进行登录,浏览器保存A的cookie

    • 防御措施
      防御实例
      Sailajs框架中的JavaScript 代码示例

    下面将以 JavaScript 为例,对上述三种方法分别用代码进行示例。

    1.验证 Referer

    // 从 HTTP 头中取得 Referer 值
     var referer=req.headers.Referer; 
     // 判断 Referer 是否以 test.example 开头
     if((referer!=null) && (_.startsWith(referer, “test.example ”)){ 
        // 验证通过
     }else{ 
        // 验证失败,返回错误
     }
    

    2.验证请求中的 token

    
     var session = req.session;
    
     // 从 session 中得到 csrftoken 属性
     var  token = session.csrftoken; 
     if(token == null){ 
    
        // 产生新的 token 放入 session 中
        token = generateToken(); 
        token.csrftoken = token ; 
       return ....
     } else{ 
    
        // 从 HTTP 头中取得 csrftoken 
        var  token = req.headers.csrftoken; 
    
        // 从请求参数中取得 csrftoken 
        var  xhrToken = req.param('csrftoken'); 
        if(token != null && xhrToken != null && token.equals(xhrToken)){ 
           return ...
        }else{ 
            return ...  // ERROR
        } 
     }
    HTTP 头中自定义属性(网上例子)
    var plainXhr = dojo.xhr; 
    
     // 重写 dojo.xhr 方法
     dojo.xhr = function(method,args,hasBody) { 
        // 确保 header 对象存在
        args.headers = args.header || {}; 
            
        tokenValue = '<%=request.getSession(false).getAttribute("csrftoken")%>'; 
        var token = dojo.getObject("tokenValue"); 
        
        // 把 csrftoken 属性放到头中
        args.headers["csrftoken"] = (token) ? token : "  "; 
        return plainXhr(method,args,hasBody); 
     };
    

    总结

    CSRF 是一种危害非常大的攻击,又很难以防范。目前几种防御策略虽然可以很大程度上抵御 CSRF 的攻击,但并没有一种完美的解决方案。一些新的方案正在研究之中,比如对于每次请求都使用不同的动态口令,把 Referer 和 token 方案结合起来,甚至尝试修改 HTTP 规范,但是这些新的方案尚不成熟,要正式投入使用并被业界广为接受还需时日。在这之前,我们只有充分重视 CSRF,根据系统的实际情况选择最合适的策略,这样才能把 CSRF 的危害降到最低

    XSS
    image.png image.png

    相关文章

      网友评论

        本文标题:day08-前端面试技巧-(安全类)

        本文链接:https://www.haomeiwen.com/subject/lsdypqtx.html