zoukankan      html  css  js  c++  java
  • springsecurity-CSRF

    springsecurity的防CSRF的功能是开启的,一般也建议开启。

      CSRF的原理

        CSRF攻击原理比较简单,例如Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。

    用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;并且,此后从用户浏览器发送请求给网站A时都会默认带上用户的Cookie信息;

        2)用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

        3)网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

        4)浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求的最终发起者其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

        简单来说,CSRF必须经过两个步骤:

          1、用户访问可信任站点A,并产生了相关的cookie;

          2、用户在访问A站点时没有退出,同时访问了危险站点B。

       先讲一下,springsecurity的防CSRF的基本原理:

        1.一般用户向服务器请求登录,服务器会返回一个登录的表单页面,实际上这时候服务器就已经保存了一串随机生成的字符串A

        2.返回给用户的登录表单页面中,有一个隐藏域,值就是字符串A

        3.当用户提交表单时,隐藏域中的字符串A和服务器上的字符串A比较,一般来说都是相同的,此时服务器就认为是用户本人操作

      这里的关键实际上就是这一串字符串A了,在请求登录页面的时候就已经保存一份在服务器了,然后给用户一份。一些恶意网站可以拿到用户在服务器认证过的cookie,但是拿不到这个这个字符串A

      如果csrf功能开启了,那么在表单页面中,需要加上下面一段的(前提得有thymeleaf的jar包):

    <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
  • 相关阅读:
    unity_动画_状态机
    有内涵的技术论坛
    ios开发——常用经典算法OC篇&冒泡/快速
    iOS开发——C篇&文件操作
    iOS开发——C篇&预处理
    iOS开发——C篇&结构体与枚举
    iOS开发——C篇&函数解析
    iOS开发——C篇&动态内存分析
    UML第二次作业(代码互评)
    我与UML相爱相杀的狗血日常
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/14378074.html
Copyright © 2011-2022 走看看