(转)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_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包含的东西来做。
摘自:http://www.cnblogs.com/davidwang456/p/3585162.html
(转)java使用jsp servlet来防止csrf 攻击的实现方法的更多相关文章
- java使用jsp servlet来防止csrf 攻击的实现方法
背景: 1.csrf知识 CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或 ...
- java开发JSP+Servlet+bootstrap开发电影院购票系统 源码
基于JSP+Servlet+bootstrap开发电影院购票系统:开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+Mysql数据库 程序要求:电影院订票系统 用 ...
- java网页程序采用 spring 防止 csrf 攻击 转
银行项目开发过程中,基本都会采用 spring 框架,所以完全可以不用自己开发 filter 去拦截 csrf 攻击的请求,而直接采用实现 spring 提供的 HandlerInterceptor ...
- java学习笔记38(sql注入攻击及解决方法)
上一篇我们写了jdbc工具类:JDBCUtils ,在这里我们使用该工具类来连接数据库, 在之前我们使用 Statement接口下的executeQuery(sql)方法来执行搜索语句,但是这个接口并 ...
- java之jsp页面语法
jsp页面相比静态页面html来说,就是多了一些脚本,利用这些脚本来动态地改变页面内容的显示. 1.JSP脚本写法 <% 这里写java代码; %> <%! JSP声明,用来声明变量 ...
- 安全 --- CSRF攻击
什么是CSRF CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/X ...
- 咱妈说别乱点链接之浅谈CSRF攻击
平时经常听到人们说别乱点链接,小心有病毒.还有长辈们转发的“天呐~XXX的阴谋,全是病毒”.“XXX惊天大病毒,点了苹果手机就要爆炸!”.“现在转发热门连接会乱扣费!千万别点!”. 到底长辈们说的这些 ...
- Java中jsp和Servlet的区别
1 Servlet Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面.它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务 ...
- 从0开始学Java——从jsp到servlet转换的各种辅助元素介绍
1. 指示元素,<%@指示元素 [属性=值]* %> 其中指示元素包括page, include, 和tablib三个. 其中 属性=值 可以有多对. 其中page用来告知容器如何转译目 ...
随机推荐
- 二十九 Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求
selenium模块 selenium模块为第三方模块需要安装,selenium模块是一个操作各种浏览器对应软件的api接口模块 selenium模块是一个操作各种浏览器对应软件的api接口模块,所以 ...
- jps、jstack、jmap、jhat、jstat、hprof使用详解
https://my.oschina.net/feichexia/blog/196575#comment-list A. jps(Java Virtual Machine Process Status ...
- hdu2426
题解: KM模板题 如果n>m,输出-1 如果a[match[i]][i]==-1输出-1 负的边不用考虑 初始都赋值为-1 代码: #include<cstdio> #includ ...
- 【前端工具】 在 Windows 下安装 GruntJS——教程(译)
在你安装 Grunt.js 之前你需要先安装 Node.js.对于本教程而言,我已经安装好了 node.js v0.10.0. 我将要安装 Grunt.js v0.4.1.警告:如果你已经安装了 Gr ...
- d3.js(v5.7)的比例尺以及坐标轴
直接上代码了,这里的一些函数用的是之前我自己封装的函数(包括attr的obj支持和节点数量和数据数量的自动匹配),若有不明白的,可以查看之前的博客: 页面的效果如下: 接下来继续添加坐标轴: 最终:
- 从JDK源码角度看Object
Java的Object是所有其他类的父类,从继承的层次来看它就是最顶层根,所以它也是唯一一个没有父类的类.它包含了对象常用的一些方法,比如getClass.hashCode.equals.clone. ...
- BitArray编写埃拉托斯特尼筛法(原书错误,学习更正)
刚开始代码无法运行,修改后原书代码可以运行了,可是书本的思想还是错的. 虽然接下来的都是讲错误的思想下的“错误”的修改. 原书缺了窗体控件的代码,虽然在VS下不需要手动写窗体的代码,但是刚开始确实也不 ...
- Mininet python代码创建拓扑、交互式界面创建主机、交换机
python代码创建拓扑: from mininet.net importMininet net =Mininet() # Creating nodes in the network. c ...
- Compass入门
一.Compass是什么? 简单说,Compass是Sass的工具库(toolkit). Sass本身只是一个编译器,Compass在它的基础上,封装了一系列有用的模块和模板,补充Sass的功能. ...
- js之验证码倒计时功能
<!DOCTYPE html> <html > <head> <meta http-equiv="Content-Type" conten ...