Spring MVC,Thymeleaf,Spring Security应用程序中的CSRF保护

跨站点请求伪造(CSRF)是一种攻击,它迫使最终用户在当前已通过身份验证的Web应用程序上执行不需要的操作。 如果您使用Spring Security 3.2及更高版本,在Spring MVC / Thymeleaf应用程序中防止CSRF攻击相当容易。

怎么测试?

为了进行测试,我创建了一个区域受限的应用程序,可以在其中发送表单。 表单的源代码:

<form class="form-narrow form-horizontal" method="post" th:action="@{/message}" th:object="${messageForm}" action="http://localhost:8080/message"><fieldset><legend>Send a classified message</legend><div class="form-group" th:classappend="${#fields.hasErrors('payload')}? 'has-error'"><label for="payload" class="col-lg-2 control-label">Payload</label><div class="col-lg-10"><input type="text" class="form-control" id="payload" placeholder="Payload" th:field="*{payload}" name="payload"/><span class="help-block" th:if="${#fields.hasErrors('payload')}" th:errors="*{payload}">May not be empty</span></div></div><div class="form-group"><div class="col-lg-offset-2 col-lg-10"><button type="submit" class="btn btn-default">Send</button></div></div></fieldset>
</form>

知道操作URL是http:// localhost:8080 / message之后,我创建了一个单独的页面,其中包含一个引用该URL(带有所有参数)的HTTP请求:

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<form action="http://localhost:8080/message" method="post"><input type="hidden" name="payload" value="Hacked content!"/><input type="submit" value="Hack!" />
</form>
</body>
</html>

我登录了该应用程序并执行了上面的代码。 当然,服务器允许我执行请求,因为我的应用程序容易受到CSRF攻击。 要了解有关CSRF测试的更多信息,请访问此链接: CSRF测试 。

如何保护?

如果您将XML配置与Spring Security一起使用,则必须启用CSRF保护:

<security:http auto-config="true" disable-url-rewriting="true" use-expressions="true"><security:csrf /><security:form-login login-page="/signin" authentication-failure-url="/signin?error=1"/><security:logout logout-url="/logout" /><security:remember-me services-ref="rememberMeServices" key="remember-me-key"/><!-- Remaining configuration --></security:http>

如果是Java配置–默认情况下启用。

从Thymeleaf 2.1版本开始,CSRF令牌将自动添加到具有隐藏输入的表单中:

<form class="form-narrow form-horizontal" method="post" action="/message"><!-- Fields --><input type="hidden" name="_csrf" value="16e9ae08-76b9-4530-b816-06819983d048" /></form>

现在,当您尝试重复攻击时,将看到“ 访问被拒绝”错误。

但是要记住的一件事是,启用CSRF保护可确保注销需要CSRF令牌。 我使用JavaScript提交了隐藏表格:

<a href="/logout" th:href="@{#}" onclick="$('#form').submit();">Logout</a><form style="visibility: hidden" id="form" method="post" action="#" th:action="@{/logout}"></form>

摘要

在这篇简短的文章中,我展示了在使用Spring MVC(3.1 +),Thymeleaf(2.1+)和Spring Security(3.2+)时,如何轻松利用CSRF保护。 从Spring Security 4开始,使用XML配置时,默认情况下也会启用CSRF。 请注意,使用HTTP会话来存储CSRF令牌。 但这很容易改变。 有关更多详细信息,请参见参考。

  • 我在Spring MVC原型中包含CSRF配置。 请检查!

资源资源

  • Thymeleaf –与RequestDataValueProcessor集成
  • Spring安全– CSRF攻击
  • OWASP –跨站请求伪造(CSRF)

翻译自: https://www.javacodegeeks.com/2014/04/csrf-protection-in-spring-mvc-thymeleaf-spring-security-application.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

清除浮动的方式

1、父级div定义伪类&#xff1a;after和zoom <style type"text/css"> .div1{background:#000080;border:1px solid red;}.div2{background:#800080;border:1px solid red;height:100px;margin-top:10px}.left{float:left;width:20%;height:200px;background:#D…

centos7 samba配置完成后不管怎么登陆都会显示密码错误的解决方案

添加系统用户 useradd samba 添加samba用户 smbpasswd -a samba 激活samba用户 smbpasswd -e samba 1.winr运行secpol.msc打开本地安全策略 2.安全策略->本地策略->安全选项 3.右侧找到 网络安全:LAN管理器身份验证级别 打开 &#xff0c;选择 仅发送NTLMv2响应&#xf…

rabbitmq简单运用

<?php /*** 生产者*/$connection new AMQPConnection([host > 192.168.23.130,port > 5672,login > rabuser,password > 123456 ]);$connection->connect() or die(连接失败);try{$exchange_name trades;$route_key /trade;//投递消息到中间件$channel …

JPDL3.1规范手册

JPDL3.1规范手册jBPM业务程序定义语言&#xff08;jBPM Process Definition Language (JPDL)&#xff09;Blog: http://blog.csdn.net/shendl/2006-10-13前言&#xff1a;这是jBPM3.1指南第16章的翻译。但不仅仅是简单的翻译而已。其中加入了我对jBPM的JPDL规范和技术的理解。我…

py函数两个返回值_Python 函数为什么会默认返回 None?

Python 有一项默认的做法&#xff0c;很多编程语言都没有——它的所有函数都会有一个返回值&#xff0c;不管你有没有写 return 语句。本文出自“Python为什么”系列&#xff0c;在正式开始之前&#xff0c;我们就用之前讨论过的 pass语句和 …对象 作为例子&#xff0c;看看 P…

Apache CXF 3.0:JAX-RS 2.0和Bean验证1.1最终一起

即将发布的出色的Apache CXF框架3.0版 &#xff08;当前处于里程碑2阶段&#xff09;带来了许多有趣且有用的功能&#xff0c;越来越接近提供完整的JAX-RS 2.0支持。 Bean Validation 1.1的支持是我们中许多人期盼已久的功能之一&#xff1a;简单而简洁的模型可为您的REST服务层…

windows.onload和body的onload属性的区别

关于windows.onload和body的onload属性的区别网上有些说法说的也不太统一,现在系统说下: 先看共同点: 都是body内容体加载结束执行&#xff1b; window.onload 内部方式可以 推荐的 body onload属性&#xff1a; 内联或者内嵌方式可以&#xff0c; 内部也可以 首先,这两个onlo…

行高 line-height

一、行高的定义line-height(行高)&#xff1a;两行文字基线之间的距离1、什么是基线&#xff1f;2、为何是基线&#xff1f;3、需要两行吗&#xff1f;1、什么是基线&#xff1f;我们上学的时候都用过&#xff0c;抄写英文字母的时候。其中有一条红线&#xff0c;这个红线就是基…

实验七报告

一、实验结论 part1&#xff1a;验证性实验 1.验证性实验2 如果事先不知道学生人数&#xff0c;尝试对line29做如下修改后&#xff0c;程序运行结果是否正确&#xff1f;回答问题&#xff0c;并给出运行结果截图。 运行结果正确// 将file1.txt中小写字母转换成大写后&#xff…

Lambda表达式和流API:基本示例

该博客文章包含基本Lambda表达式和Stream API示例的列表&#xff0c;我在2014年6月在Java用户组– Politechnica Gedanensis &#xff08;格但斯克技术大学&#xff09;和Goyello的实时编码演示中使用了这些示例。 Lambda表达式 句法 最常见的示例&#xff1a; Runnable runn…

示波器1m和50欧姆示阻抗匹配_阻抗匹配,示波器,50欧姆电阻,他们之间是什么关系?(第一回)...

首先思考这样一个问题&#xff0c;下面这个测量实验中&#xff0c;示波器的测量结果是多少&#xff1f;是和信号源一样的5V吗&#xff1f;先别着急回答&#xff0c;假如里面的信号源和示波器不是理想型 &#xff0c;而是和现实中一样带有内部阻抗的元件&#xff0c;见下图&…

Ajax jquery的库的简化版本

Ajax jquery的库的简化版本 (function(){ //面向外界的唯一变量接口&#xff01; var myajax window.myajax {}; //作者、版本号等等信息 myajax.author "考拉"; myajax.version "1.0.0"; //这个对象有两个属性&#xff0c;get、pos…

10月23日java web培训日记

分析了客户端身份认证的例子程序&#xff0c;讲解到Digest认证时&#xff0c;顺便提了一下SSLServerSocket&#xff0c;要求学员们能够通过SSLServerSocket的创建过程阐述工厂模式 为了更好地读懂AuthenticateServlet这个Servlet&#xff0c;要先明白两次请求的处理代码都放在了…

全局参数使用

1. $_SERVER[HTTP_ACCEPT] 返回来自当前请求的请求头。 场景&#xff0c;校验提交的数据前&#xff0c;看是不是 post请求 if ($_SERVER["REQUEST_METHOD"] "POST") { echo "请求方式是post" } 转载于:https://www.cnblogs.com/kaibindirver/p/…

XPath语法规则及实例

XPath语法规则及实例 XPath语法规则一、XPath术语&#xff1a; 1.节点&#xff1a;在XPath中&#xff0c;有七种类型的节点&#xff1a;元素、属性、文本、命名空间、处理指令、注释以及文档&#xff08;根&#xff09;节点。 XML文档是被作为节点树来对待的。树的根被称为文档…

Spring测试上下文缓存+ AspectJ @Transactional + Ehcache的痛苦

您在使用AspectJ Transactionals和Spring吗&#xff1f; 您是否有多个SessionFactory&#xff0c;也许一个用于嵌入式数据库进行单元测试&#xff0c;一个用于实际数据库进行集成测试&#xff1f; 您是否遇到这些例外之一&#xff1f; org.springframework.transaction.Cannot…

WorkPlus超级APP助力企业节省IT人力成本,实现快速移动化

在信息化时代&#xff0c;移动应用已经成为企业发展的重要组成部分。然而&#xff0c;开发和维护原生客户端的成本却相对较高&#xff0c;需要大量的iOS、安卓和桌面端工程师。为了解决这一问题&#xff0c;WorkPlus作为一个功能完备的超级APP&#xff0c;为企业节约了大量的IT…

hujingwei oracle_Oracle收缩表空间

可以使用 alter database datafile file path... resize xM 的命令来缩小数据文件。SELECT alter database datafile || A.FILE_NAME || resize ||ROUND(A.FILESIZE - (A.FILESIZE - C.HWMSIZE - 100) * 0.8) || M;,A.FILESIZE || M AS "数据文件的总大小", C.HWM…

addEventListener的click和onclick的区别

前两节都和addEventListener的click有关&#xff0c;于是在想它与onclick有什么区别呢&#xff0c;自己调试了一下&#xff0c;网上也有相关资料 事件绑定 onclick绑定方式 优点&#xff1a; - 简洁 - 处理事件的this关键字指向当前元素 缺点&#xff1a; - 不能对事件捕获或…

学车日记

今天是正式开始学车&#xff0c;先考交规&#xff0c;今天早上要赶驾校的班车&#xff0c;所以必须6点起床&#xff0c;那叫一个难受呀&#xff0c;好像已经有很长时间没有这么早起过了&#xff0c;不过经过复杂的思想斗争我终于还是如期起床了&#xff0c;今天要是赶不上班车错…