Tomcat 7 Beta版本出来已经有段时间了,看了JavaEye上的朋友,还是有几个非常勤奋每天都在学习的朋友,他们能够每天学习,坚持下来,实属不易,他们非常的年轻,有几个,我还见过面,小伙子们的好学精神实在让人敬佩。这个社会很浮躁,我自己也是这样,尤其在杭州这种城市里生活,会有一定的压力,毕竟人总是想要更好的生活:想买大大的房子,买个自己喜欢的车子,自己的小孩上学不用着急她的学费。做人的乐趣很多,真想好好的去外面旅游一番,小女儿也刚刚出生,为了去米国,早早地把她送回了老家,我很想她。期盼着公司赶紧定下来,我好回家呆上10几天,跟女儿好好的享受一下天伦之乐。
现在上班不知道为什么特别反感,一上班就觉得没劲,不是因为自己没有激情,在公司里效率太低了,我很多的idea,都在家里想出来的。我是会自己压力的人,没办法,在这个社会生存除了兴趣之外,确实还是需要像愚公移山一样的精神,每天学习,每天进步,这样才能不会被社会所淘汰。公司里打工确实是不容易的事情,我们的项目早已ready,但是因为是跨国合作,想一个项目出去必须得各个方面都要准备好,这个是我一直担心的问题,部门的发展好坏就取决于此了,真不甘心如何真的就这样失败了,有时候就像和平年代的军队一般,没有战可打是痛苦的,做个军人死也要死在战场上。我的几个大领导是非常好的人,也是非常有经历的人,跟他们学了很多东西。
我知道我自己的特点是什么,我是勤奋的人,好几个月没有学习,实在是让人有点心慌。想想写blog,还是很好的方式,既然要学习和总结,那就从比较新的Tomcat 7 的新特性学起吧。
1. Use of a Nonce
to Prevent Cross-Site Request Forgery (CSRF) Attacks
1) 什么是CSRF
CSRF:Cross Site Request Forgery,跨站请求伪造,也被称作Session Riding,它的本质是利用你的合法身份,来发送恶意请求。CSRF能够做的事情包括:以你的名义发送电子邮件,发消息,盗取你的账号,甚至购买商品,虚拟货币转账,这些东西会给你造成财产安全和个人隐私泄露等威胁。
CSRF攻击,早在2000年已经被国外的安全人员提出,但在国内,直到2006年才开始被关注,2008年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞。
2) CSRF的工作原理及示例

由上图可以看到,攻击者充分利用了trusted site在用户登录以后,包含sessionID的Cookie一直保存在客户的PC上,当危害站点B发送给用户包含恶意请求的URL时,用户点击后,不用再登陆site A,因为cookie一般保存在http head里,发送给SiteA的所有请求,cookie值都会包含在之后的request里面。如果恶意请求是删除用户资料,修改用户资料等操作时,损失可能就是致命的。
典型案例如下:
I.
用户a访问并登录银行网站A:http://www.asite.com
A site 以get请求可以进行转账服务:
http://www.asite.com/transferMoney.do?toBankAccountID=112233&amount=1000
上面URL表示,向账号ID112233转账1000
II.
在用户a仍然登录状态时,恶意站点B给用户a发送电子邮件,邮件里有url:
<a href="http://www.asite.com/transferMoney.do?toBankAccountID=112233&amount=1000">click</a>
III.
用户a点击URL,扣款请求发生,a账号里面的钱就少了1000块钱
3) Tomcat 7是如何避免CSRF的
传统的防止CSRF攻击的方法是使用一个随机数(nonce),如果Wikipedia中定义的:在验证协议中,使用一个随机数以确保原来的通信不能被重用。
Tomcat7定义了一个servlet过滤器,它在每一次request请求处理后,在session中存储了一个随机数。这个随机数必须在随后的请求中作为请求参数。这个Servlet filter会在服务器端检查请求中的随机数是否和存储在user session中的随机数相同。如果相同,则这个请求只能从指定的站点而来。如果不相同,则这个请求是别的站点来的,因此会被拒绝。
这个Servlet过滤器很简单,下面是相关的源代码片段:
class CsrfPreventionFilter extends FilterBase {
...public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
...
String previousNonce = req.getParameter(Constants.CSRF_NONCE_REQUEST_PARAM);
String expectedNonce = (String) req.getSession(true).getAttribute(Constants.CSRF_NONCE_SESSION_ATTR_NAME);
if (expectedNonce != null && !expectedNonce.equals(previousNonce)) { res.sendError(HttpServletResponse.SC_FORBIDDEN);
return;
}
String newNonce = generateNonce(); req.getSession(true).setAttribute(Constants.CSRF_NONCE_SESSION_ATTR_NAME, newNonce);
...
因此,每个URL必须在用户回话中包含一个随机数,下面是一个例子:
没有包含随机数的URL:
< c:url var="url" value="/show" > < c:param name="id" value="0" / >< /c:url >< a href="${show}" >Show< /a >
包含随机数的URL:
< c:url var="url" value="/show" >
< c:param name="id" value="0" / >
< c:param name="org.apache.catalina.filters.CSRF_NONCE" value="${session.org.apache.catalina.filters.CSRF_NONCE}" / >
< /c:url >< a href="${show}">Show< /a >
参考资料
1.http://wenku.baidu.com/view/9fe72df8941ea76e58fa041b.html

- 大小: 29.4 KB
分享到:
相关推荐
python学习资源
jfinal-undertow 用于开发、部署由 jfinal 开发的 web 项目
基于Andorid的音乐播放器项目设计(国外开源)实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。
python学习资源
python学习资源
python学习一些项目和资源
【毕业设计】java-springboot+vue家具销售平台实现源码(完整前后端+mysql+说明文档+LunW).zip
HTML+CSS+JavaScarip开发的前端网页源代码
python学习资源
【毕业设计】java-springboot-vue健身房信息管理系统源码(完整前后端+mysql+说明文档+LunW).zip
成绩管理系统C/Go。大学生期末小作业,指针实现,C语言版本(ANSI C)和Go语言版本
1_基于大数据的智能菜品个性化推荐与点餐系统的设计与实现.docx
【毕业设计】java-springboot-vue交流互动平台实现源码(完整前后端+mysql+说明文档+LunW).zip
内容概要:本文主要探讨了在高并发情况下如何设计并优化火车票秒杀系统,确保系统的高性能与稳定性。通过对比分析三种库存管理模式(下单减库存、支付减库存、预扣库存),强调了预扣库存结合本地缓存及远程Redis统一库存的优势,同时介绍了如何利用Nginx的加权轮询策略、MQ消息队列异步处理等方式降低系统压力,保障交易完整性和数据一致性,防止超卖现象。 适用人群:具有一定互联网应用开发经验的研发人员和技术管理人员。 使用场景及目标:适用于电商、票务等行业需要处理大量瞬时并发请求的业务场景。其目标在于通过合理的架构规划,实现在高峰期保持平台的稳定运行,保证用户体验的同时最大化销售额。 其他说明:文中提及的技术细节如Epoll I/O多路复用模型以及分布式系统中的容错措施等内容,对于深入理解大规模并发系统的构建有着重要指导意义。
基于 OpenCV 和 PyTorch 的深度车牌识别
【毕业设计-java】springboot-vue教学资料管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
此数据集包含有关出租车行程的详细信息,包括乘客人数、行程距离、付款类型、车费金额和行程时长。它可用于各种数据分析和机器学习应用程序,例如票价预测和乘车模式分析。
把代码放到Word中,通过开发工具——Visual Basic——插入模块,粘贴在里在,把在硅基流动中申请的API放到VBA代码中。在Word中,选择一个问题,运行这个DeepSeekV3的宏就可以实现在线问答
【毕业设计】java-springboot+vue机动车号牌管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
【毕业设计】java-springboot-vue交通管理在线服务系统的开发源码(完整前后端+mysql+说明文档+LunW).zip