java使用jsp servlet来防止csrf ***的实现方法

2021-03-13 10:28

阅读:541

标签:equal   info   att   mic   ase   ofo   ack   小结   利用   

背景:

技术图片
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:一次性令牌在完成他们的工作后将被销毁,比较安全。

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

解决方法如下:

  1. 产生随机数。
  1. 使用隐藏域传递比较值。
>
  1. 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. 隐藏区域使用简化形式/>将会把/当成字符串解析,而不是结束符。

  3. 日志或者打印出random_form、random_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包含的东西来做。

java使用jsp servlet来防止csrf ***的实现方法

标签:equal   info   att   mic   ase   ofo   ack   小结   利用   

原文地址:https://blog.51cto.com/15015181/2556789


评论


亲,登录后才可以留言!