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}">
  • 相关阅读:
    pyspider 在ubuntu上安装失败怎么搞?
    怎么在项目中使用前端包管理器bower和构建工具gulp
    Asp.net mvc 实时生成缩率图到硬盘
    如果转载优酷、土豆视频等,怎么让视频自适应宽度?
    C语言II博客作业04
    C语言I博客作业03
    C语言II博客作业02
    C语言II博客作业01
    学期总结
    The first essay
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/14378074.html
Copyright © 2011-2022 走看看