当前位置: 首页 > news >正文

基于复杂方案OWSAP CsrfGuard的CSRF安全解决方案(适配nginx + DWR)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

摘要: OWASP是一个开源的、非盈利的全球性安全组织,致力于应用软件的安全研究。提供的CsrfGuard Project是防御CSRF的安全解决方案,但针对我们生产实际运用,在配置上还需要琢磨才能正常使用,比如在DWR框架下,如果采用才能使之有效。比如在nginx分发多servers情况下配置时有哪些需要注意的。

1、什么是CSRF?
已经有很多博文讲解其过程和攻击手段,在此就不重复了。 O(∩_∩)O 不清楚的同学,请自行搜索或按链接去了解: http://blog.csdn.net/Flaght/article/details/3873590

2、CSRFGuard_Project
开源项目 CSRFGuard,介绍了如何使用在 HTTP 请求中加入 token 并验证的方法来抵御 CSRF。https://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project

3、检测CSRF方法?
OWASP上面有一个叫做CSRFTester的工具,可以构建进行测试。
下载链接:https://www.owasp.org/index.php/CSRFTester
教程指引:http://www.zyiqibook.com/article216.html

4、如何防御CSRF?
我们采用CSRFGuard_Project方案 JAVA DOM方式。
配置如下:

1)引入csrfguard-3.1.0.jar到你的工程: 2)配置web.xml:

<!-- 基于复杂方案OWASP CsrfGuard的CSRF安全过滤 -->
    <servlet>
       <servlet-name>JavaScriptServlet</servlet-name>
       <servlet-class>org.owasp.csrfguard.servlet.JavaScriptServlet</servlet-class>
    </servlet>
    <servlet-mapping>
       <servlet-name>JavaScriptServlet</servlet-name>
       <url-pattern>/JavaScriptServlet</url-pattern>
    </servlet-mapping>
    <context-param>
      <param-name>Owasp.CsrfGuard.Config</param-name>
      <param-value>WEB-INF/csrfguard.properties</param-value><!-- 配置文件 -->
    </context-param>
    <context-param>
       <param-name>Owasp.CsrfGuard.Config.Print</param-name>
       <param-value>true</param-value>
    </context-param>
    <!-- session监听器 --><!-- 基于复杂方案CsrfGuard的session监听器 -->
    <listener>
        <listener-class>org.owasp.csrfguard.CsrfGuardHttpSessionListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.owasp.csrfguard.CsrfGuardServletContextListener</listener-class>
    </listener>
    <filter>
        <filter-name>CSRFGuard</filter-name>
        <filter-class>org.owasp.csrfguard.CsrfGuardFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CSRFGuard</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

3)引入配置文件csrfguard.js csrfguard.properties(jar包META-INF里面有) csrfguard.properties配置文件中有几点需要注意:

可以指定加载的js,为方便管理,我放在WEB-INF目录下:

org.owasp.csrfguard.JavascriptServlet.sourceFile = WEB-INF/csrfguard.js

org.owasp.csrfguard.TokenName 对于nginx分发多servers的情况,nginx默认过滤带下划线的header,要么改掉nginx的配置,要么改这个参数的值。 参考:http://www.ttlsa.com/nginx/nginx-proxy_set_header

#>>>>>>>>>>>>>--author by caizhengluan  e-mail: SvenAugustus@outlook.com
#Nginx ignores the underlined header variables by default.
# Please do not set "TokenName" has any underlines if you can't unkonwn how to change nginx's configuration.
org.owasp.csrfguard.TokenName=PAYCSRFTOKEN
#<<<<<<<<<<<<<--author by caizhengluan  e-mail: SvenAugustus@outlook.com

org.owasp.csrfguard.JavascriptServlet.refererMatchDomain 对于nginx分发多servers的情况,需要设置为false

#>>>>>>>>>>>>>--author by caizhengluan e-mail: SvenAugustus@outlook.com
# If you have cluster and nginx, please set this value to false.Otherwise, you will can't visit into the servers when you access nginx address.
org.owasp.csrfguard.JavascriptServlet.refererMatchDomain = false
#<<<<<<<<<<<<<--author by caizhengluan e-mail: SvenAugustus@outlook.com

4、如何具体防御DWR和我们的页面? 在你的页面最后加上这么一句:

<!-- OWASP CSRFGuard JavaScript Support -->
<script src="<%=request.getContextPath()%>/JavaScriptServlet"></script>

输入图片说明

如此,完美解决。--author by caizhengluan e-mail: SvenAugustus@outlook.com 如有转载,请标明转载,并附上原始链接,谢谢。

转载于:https://my.oschina.net/sniperLi/blog/756373

相关文章:

  • 技术杂谈
  • 回发或回调参数无效
  • 学习三大境界!
  • at命令详解
  • ARM 汇编寻址方式
  • C#多线程应用技术面对面探讨
  • 简单的多人聊天(C#.Socket)
  • Direct3D极速入门宝典
  • 正则语言(转的 大额_skylar )
  • ASP.NET 2.0中直接将Access数据库导入到Excel文件中
  • 读书笔记1
  • 安然公司特殊目的实体(SPEs)解读
  • 双击本地磁盘会出现比如C:\不是有效的Win32应用程序
  • findbugs eclipse 插件 及使用
  • 数字通讯基础:同步与异步
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 2017-09-12 前端日报
  • ES10 特性的完整指南
  • EventListener原理
  • Intervention/image 图片处理扩展包的安装和使用
  • jQuery(一)
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Mithril.js 入门介绍
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Redis的resp协议
  • Spark RDD学习: aggregate函数
  • webpack入门学习手记(二)
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 半理解系列--Promise的进化史
  • 大主子表关联的性能优化方法
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 浏览器缓存机制分析
  • 如何合理的规划jvm性能调优
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​configparser --- 配置文件解析器​
  • # 计算机视觉入门
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (007)XHTML文档之标题——h1~h6
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (9)STL算法之逆转旋转
  • (java)关于Thread的挂起和恢复
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三)终结任务
  • (算法二)滑动窗口
  • (转)JAVA中的堆栈
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .NET Core 中的路径问题
  • .net framework4与其client profile版本的区别