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)
上一篇 2020年11月12日 上午9:48
下一篇 2020年11月12日 上午9:48


相关推荐

  • java九九_java九九乘法表

    java九九_java九九乘法表前言 九九乘法表是新手学习必会敲的一个小案例 九九乘法表有着一定的逻辑 初学者一般觉得很难 对于老手来讲 乘法表两分钟就可以出来但是乘法表还可以延伸用不同的循环方式三种循环 从不同的角度输出又该怎么实现呢 这又是一个值得思考的问题 代码的可能性绝不止于此 一 用 for 循环打印九九乘法表 packageday01 publicclassd publicstatic

    2026年3月19日
    2
  • 微服务精通之Feign原理解析[通俗易懂]

    微服务精通之Feign原理解析[通俗易懂]前言       经过微服务精通之Ribbon原理解析的学习,我们了解到了服务消费者获取服务提供者实例的过程,都是通过RestTemplate来实现的,而且,都是模板化操作。那springcloud是否有哪个组件可以通过注解或者配置的方式,来简化这个过程?答案是有的,就是Feign。一、Feign是什么?       Feign是一个声明式的伪HTTP客户端,

    2022年10月4日
    5
  • mknod详解

    mknod详解br br mknod makeblockorc mknod OPTION NAMETYPE MAJORMINOR br nbsp nbsp nbsp option 有用的就是 m 了 br nbsp nbsp nbsp name nbsp nbsp 自定义 br nbsp nbsp nbsp type nbsp nbsp 有 b 和 c 还有 pbr nbsp nbsp nbsp 主设备号 br nbsp nbsp nbsp 次设备号 br br 主设备号是由 usr src linux i

    2026年3月17日
    1
  • Python中if语句用法及其实例【详细】

    Python中if语句用法及其实例【详细】if 语句的语法及其实例等

    2026年3月18日
    1
  • mac上Latex的安装及使用教程「建议收藏」

    mac上Latex的安装及使用教程「建议收藏」latex的安装官网下载地址:http://tug.org/mactex/以前在Mac上装Tex/LaTeX很麻烦,现在容易多了,只需要下载单个软件包MacTeX.mpkg.zip即可,安装后会在Applications下生成一个Tex目录,Tex/LaTeX编辑器TeXShop,reference工具BibDesk,拼写检查工具Excalibur等都在这个目…

    2022年5月11日
    152
  • springaop与aspectjweaver

    springaop与aspectjweaverorg.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname’sysScheduleUserDateServiceImpl’definedinURL[jar:file:/C:/Users/Administrator/.m2/repository/com/ruoyi/ruoyi-schedule-one/3.4.0/ruoyi-schedule-one-3.4.0.jar!/com/ruo

    2022年7月12日
    31

发表回复

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

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