zoukankan      html  css  js  c++  java
  • (转)java使用jsp servlet来防止csrf 攻击的实现方法

    背景:

    1.csrf知识

    CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

    常见的解决方法:

       Cookies Hashing:每一个表单请求中都加入随机的Cookie,由于网站中存在XSS漏洞而被偷窃的危险。

       HTTP refer:可以对服务器获得的请求来路进行欺骗以使得他们看起来合法,这种方法不能够有效防止攻击。

       验证码:用户提交的每一个表单中使用一个随机验证码,让用户在文本框中填写图片上的随机字符串,并且在提交表单后对其进行检测。

      令牌Tocken:一次性令牌在完成他们的工作后将被销毁,比较安全。

    2. 在jsp 表单中产生一个加密随机数,传入到serlet中进行验证。

    解决方法如下:

    1. 产生随机数。

    <%

    SecureRandom random=SecureRandom.getInstance("SHA1PRNG");

    long seq=random.nextLong();
    String random=""+seq;
    session.setAttribute("random_session",random);

    %>

    2. 使用隐藏域传递比较值。

    <input type="hidden" name="random_form" value=<%=random%>></input>

    3. servlet控制器获取参数比较。

    复制代码
       String random_form=request.getParameter("random_form");
       String random_session=(String)request.getSession().getAttribute("random_session");
       out.println("random_form:"+random_form);
       out.println("random_session:"+random_session);
       if(random_form!=null&&random_session!=null&&random_form.equalsIgnoreCase(random_session)){
    //business
    }
    复制代码

    小结:

    1. jsp中使用java代码,使用<%=%>形式,错误使用过'${}'.

    2. 隐藏区域使用简化形式<input type="hidden" name="random_form" value=<%=random%>/>将会把/当成字符串解析,而不是结束符。

    3. 日志或者打印出random_formrandom_session 的值,防止出现无法调试的情况。

    4. jsp中规规矩矩的使用session.setAttribute()设值,servlet中使用request.getSession().getAttribute() 取值最保险。

    5. 隐藏区一定要位于提交按钮前面,否则将读取不到隐藏区的值。

    6. 见我的前两篇文章。

    http://www.cnblogs.com/davidwang456/p/3579339.html 使用filter来做

    http://www.cnblogs.com/davidwang456/p/3579444.html  使用tag或者spring security包含的东西来做。

    摘自:http://www.cnblogs.com/davidwang456/p/3585162.html

  • 相关阅读:
    模板 无源汇上下界可行流 loj115
    ICPC2018JiaozuoE Resistors in Parallel 高精度 数论
    hdu 2255 奔小康赚大钱 最佳匹配 KM算法
    ICPC2018Beijing 现场赛D Frog and Portal 构造
    codeforce 1175E Minimal Segment Cover ST表 倍增思想
    ICPC2018Jiaozuo 现场赛H Can You Solve the Harder Problem? 后缀数组 树上差分 ST表 口胡题解
    luogu P1966 火柴排队 树状数组 逆序对 离散化
    luogu P1970 花匠 贪心
    luogu P1967 货车运输 最大生成树 倍增LCA
    luogu P1315 观光公交 贪心
  • 原文地址:https://www.cnblogs.com/antyi/p/6385073.html
Copyright © 2011-2022 走看看