博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java使用jsp servlet来防止csrf 攻击的实现方法
阅读量:4975 次
发布时间:2019-06-12

本文共 1656 字,大约阅读时间需要 5 分钟。

 

背景:

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包含的东西来做。

转载于:https://www.cnblogs.com/firstdream/p/7760603.html

你可能感兴趣的文章
jz1074 【基础】寻找2的幂
查看>>
Wannafly模拟赛5 A 思维 D 暴力
查看>>
【Linux开发】CCS远程调试ARM,AM4378
查看>>
Linux之ssh服务介绍
查看>>
排序:冒泡排序
查看>>
Java中instanceof关键字的用法总结
查看>>
引用类型-Function类型
查看>>
(转)Android 仿订单出票效果 (附DEMO)
查看>>
数据库多张表导出到excel
查看>>
微信小程序去除button默认样式
查看>>
Where does Visual Studio look for C++ Header files?
查看>>
Java打包可执行jar包 包含外部文件
查看>>
Windows Phone开发(37):动画之ColorAnimation
查看>>
js中escape,encodeURI,encodeURIComponent 区别(转)
查看>>
sass学习笔记-安装
查看>>
Flask (二) cookie 与 session 模型
查看>>
修改添加网址的教程文件名
查看>>
[BZOJ 1017][JSOI2008]魔兽地图DotR(树形Dp)
查看>>
裁剪图片
查看>>
数据结构实习 problem L 由二叉树的中序层序重建二叉树
查看>>