预防

Java 不提供针对 CSRF 攻击的内置保护;开发人员必须通过手动强制执行反 CSRF 令牌或使用许多经过良好测试的可用库之一来实现它。

小服务程序 API

当使用标准的 Servlet API 时,双重提交 cookie 技术可以如下实现。要生成用作标记的随机字符串,可以使用SecureRandom该类,例如:

public class CSRF {public static String getToken() throws NoSuchAlgorithmException{// generate random dataSecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");byte[] data = new byte[16];secureRandom.nextBytes(data);// convert to Base64 stringreturn Base64.getEncoder().encodeToString(data);}
}

假设使用 JSP 页面呈现 HTML 页面,可以使用以下代码段将 CSRF 令牌添加到表单和响应 cookie:

<%
// generate a random CSRF token
String csrfToken = CSRF.getToken();// place the CSRF token in a cookie
javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie("csrfToken", csrfToken);
response.addCookie(cookie);
%><form action="/action" method="POST"><input type="hidden" name="csrfToken" value="<%= csrfToken %>"/>
</form>

最后,对于每个操作,通过检查 cookie 中的 CSRF 令牌是否与表单中的值匹配来确保请求是合法的:

public void doAction(HttpServletRequest request, HttpServletResponse response) {// get the CSRF cookieString csrfCookie = null;for (Cookie cookie : request.getCookies()) {if (cookie.getName().equals("csrf")) {csrfCookie = cookie.getValue();}}// get the CSRF form fieldString csrfField = request.getParameter("csrf");// validate CSRFif (csrfCookie == null || csrfField == null || !csrfCookie.equals(csrfField)) {try {response.sendError(401);} catch (IOException e) {// ...}return;}// ...
}

参考

OWASP -跨站点请求伪造备忘单MITRE - CWE 352

Java中的跨站请求伪造相关推荐

  1. 在 Asp.Net Core WebAPI 中防御跨站请求伪造攻击

    什么是跨站请求伪造 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或 ...

  2. django中csrftoken跨站请求伪造的几种方式

    1.介绍 我们之前从前端给后端发送数据的时候,一直都是把setting中中间件里的的csrftoken这条给注释掉,其实这个主要起了一个对保护作用,以免恶意性数据的攻击.但是这样直接注释掉并不是理智型 ...

  3. WordPress qTranslate插件跨站请求伪造漏洞

    漏洞名称: WordPress qTranslate插件跨站请求伪造漏洞 CNNVD编号: CNNVD-201306-058 发布时间: 2013-06-07 更新时间: 2013-06-07 危害等 ...

  4. .NET Core实战项目之CMS 第十四章 开发篇-防止跨站请求伪造(XSRF/CSRF)攻击处理...

    通过 ASP.NET Core,开发者可轻松配置和管理其应用的安全性. ASP.NET Core 中包含管理身份验证.授权.数据保护.SSL 强制.应用机密.请求防伪保护及 CORS 管理等等安全方面 ...

  5. WordPress Citizen Space插件跨站请求伪造漏洞

    漏洞名称: WordPress Citizen Space插件跨站请求伪造漏洞 CNNVD编号: CNNVD-201307-463 发布时间: 2013-07-23 更新时间: 2013-07-23 ...

  6. WordPress WP cleanfix插件‘eval()’函数跨站请求伪造漏洞

    漏洞名称: WordPress WP cleanfix插件'eval()'函数跨站请求伪造漏洞 CNNVD编号: CNNVD-201305-381 发布时间: 2013-05-20 更新时间: 201 ...

  7. 跨站请求伪造CSRF防护方法

    CSRF(Cross-site request forgery跨站请求伪造,也被称成为"one click attack"或者session riding,通常缩写为CSRF或者X ...

  8. CSFR(跨站请求伪造)攻击与防御

    一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ...

  9. 带你了解跨站请求伪造(CSRF),具体代码实现

    假如现在有网站A(淘宝)和网站B(黑客网站),某一个晚上你打开淘宝网站正在购物..突然你感觉很无聊,你百度找啊找,找了一个小黄网,其实这是钓鱼网站.此时的情况是你同时打开了淘宝网站和小黄网网站,然后问 ...

  10. web安全性测试用例(输入、输出、SQL注入、跨站请求伪造(CSRF)、跨站脚本攻击(XSS))实实在在的干货

    https://www.cnblogs.com/qmfsun/p/3724406.html 建立整体的威胁模型,测试溢出漏洞.信息泄漏.错误处理.SQL 注入.身份验证和授权错误. 1.   输入验证 ...

最新文章

  1. [原创]SparkR针对mysql的数据读写操作实现
  2. linux下memcached安装 和redis安装,jdk,tomcat,mysql 安装
  3. Python 爬虫 - Instagram异步协程
  4. dubbo学习笔记 第三章简介dubbo的工作原理
  5. 为什么叫python编程-为什么建议大家学习Python编程呢?老男孩Python入门
  6. 60多套html5移动端模板_美容整形高保真移动端原型模板发布
  7. springboot的redis工具类编写(采用RedisTemplate)(简单的取值,取多个值)。
  8. org.apache.tomcat.util.scan.StandardJarScanner找不到serializer.jar的问题
  9. 毕业作文计算机系统与维护,修电脑作文600字
  10. MySql如何使用索引(二)
  11. QTP的那些事 -– Visual Relation Identifier Feature: How to use in the real world
  12. pycharm不认识numpy?_深度学习(CV方向)入坑不完全指南
  13. 5. laravel 路由(2)
  14. 【机器学习概率统计】18 隐马尔科夫模型:明暗两条线
  15. python微信投票平台_Python——开发一个自动化微信投票器【附代码实例方法】
  16. 计算机顶会:投稿时间 会议介绍
  17. LUA中判断GameObject是否被Destory
  18. android drawText()方法中x,y坐标值真正的 意义
  19. 概率统计Python计算:样本数据的经验分布函数
  20. 阿里P8专家年薪170万IT男征婚被嘲讽?钱不是万能的!

热门文章

  1. pdf添加水印的方法
  2. [机器学习、Spark]Spark机器学习库MLlib的概述与数据类型
  3. 阿里巴巴分布式调度引擎tbschedule实战二源码环境搭建
  4. 单代号网络图计算例题_一表多图(表格/横道图/网络图)让计划编制效率提高10倍...
  5. docker介绍与应用
  6. java 换行规范_Java代码规范
  7. 高德地图经纬度检索校验
  8. python第四天 组合数据类型 文件与数据格式化
  9. uni-app 项目创建 (简单+明确!!!)
  10. 单职业传奇私脱机辅助制作视频教程