SpringSecurity(十七)——CSRF

SpringSecurity(十七)——CSRF

一.引入

从刚开始学习Spring Security时,在配置类中一直存在这样一行代码:http.csrf().disable();如果没有这行代码导致用户无法被认证。这行代码的含义是:关闭csrf防护。

二.什么是CSRF

在这里插入图片描述
CSRF即跨站请求攻击。简单的说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己以前认证过的站点并运行一些操作(如发邮件,发消息,甚至财产操作(如转账和购买商品))。因为浏览器之前认证过,所以被访问的站点会绝点是这是真正的用户操作而去运行.
这就利用了web中用户身份认证验证的一个漏洞:简单的身份验证仅仅能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
其实可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包含:以你的名义发送邮件;发消息;盗取你的账号;甚至于购买商品、虚拟货币转账…造成的问题包含个人隐私泄露以及财产安全。

三.Spring Security中CSRF

从Spring Security4开始CSRF防护默认开启。默认会拦截请求。进行CSRF处理。CSRF为了保证不是其他第三方网站访问,要求访问时携带参数名为_csrf值为token(token在服务端产生)的内容,如果token和服务端的token匹配成功,则正常访问。

1.实现步骤

1)编写控制器方法

编写控制器方法,跳转到templates中login.html页面。

@GetMapping("/showLogin")
public String showLogin() {
   
    return "login";
}

2)新建login.html

在项目resources下新建templates文件夹,并在文件夹中新建login.html页面。红色部分是必须存在的否则无法正常登录。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action = "/login" method="post">
  //在所有表单提交中,都必须添加这个
  <input type="hidden" th:value="${_csrf.token}" name="_csrf" th:if="${_csrf}"/>
    用户名:<input type="text" name="username"/><br/>
    密码:<input type="password" name="password"/><br/>
    <input type="submit" value="登录"/>
</form>
</body>
</html>

3)修改配置类

在配置类中注释掉CSRF防护失效

//关闭csrf防护
//http.csrf().disable();

四.开启CSRF后的退出登录

如果我们开启了CSRF保护机制,则默认情况下,不能使用get方式的/logout
官方的说明:
在这里插入图片描述
翻译一下就是最简单的方式就是使用form表单退出,如果非要使用一个链接退出,可以通过JavaScript模拟一个表单,设置post退出。如果非要使用get方式退出,上图中官方也给出了代码
我们可以这么解决:

<form style="float: right" action="/logout" method="post">
    <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
    <button type='submit'>退出</button>
</form>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2347.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java并发之SynchronousQueue实现原理[通俗易懂]

    java并发之SynchronousQueue实现原理[通俗易懂]前言SynchronousQueue是一个比较特别的队列,由于在线程池方面有所应用,为了更好的理解线程池的实现原理,笔者花了些时间学习了一下该队列源码(JDK1.8),此队列源码中充斥着大量的CAS语句,理解起来是有些难度的,为了方便日后回顾,本篇文章会以简洁的图形化方式展示该队列底层的实现原理。SynchronousQueue简单使用经典的生产者-消费者模式,操作流程是这样的:有多个生产者,可以并

    2022年6月22日
    76
  • DSP28335学习记录(一)

    DSP28335学习记录(一)本文记录dsp28335的各种外设的配置方法,常见模块的驱动方法,以及各种常见问题的解决方法,持续更新

    2022年10月19日
    0
  • 回声状态网络基础知识_肝血管瘤内回声成网络样

    回声状态网络基础知识_肝血管瘤内回声成网络样http://jlearning.cn/2017/05/29/ESN-basic-tutorial/最近在看回声状态网络(EchoStateNetwork)的内容,注意到中文搜索引擎搜不到关于有关EchoStateNetwork通俗的讲解,打算写一下关于ESN的一个基本教程。本文先用一小段简单介绍ESN是什么,然后用公式来表示这种网络,并说明他的优缺点,最后用一个可执行的简单例子来演示…

    2022年10月21日
    0
  • 行为识别综述

    行为识别综述定义背景难点最新论文最新算法数据集1定义行为识别:行为识别(ActionRecognition)任务是从视频剪辑(2D帧序列)中识别不同的动作,其中动作可以在视频的整个持续时间内执行或不执行。行为识别似乎是图像分类任务到多个帧的扩展,然后聚合来自每帧的预测。尽管图像分类取得了很大的成功,但是视频分类和表示学习依然进展缓慢。2背景2.1方法2.1.1传统方法提取视频区域的局部高维视觉特征,然后组合成固定大小的视频级描述,最后利用分类器(SVM,RF等)进行最终预测2.

    2022年6月21日
    26
  • linux下vsftpd架设ftp服务器「建议收藏」

    linux下vsftpd架设ftp服务器「建议收藏」1.sudoapt-getinstallvsftpd2.使用netstat-tnl可以查看是否打开了21端口。是否有这行:tcp000.0.0.0:210.0.0.0:*LISTEN3.用浏览器访问一下吧ftp://10.45.7.25安装完毕后,匿名用户可以正常访问ftp具体配置参见:原文地址:http://…

    2022年7月21日
    11
  • Palette状态栏颜色提取,写的不错就分享了

    Palette状态栏颜色提取,写的不错就分享了

    2021年9月9日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号