00:01
各位大家好,欢迎继续收看上硅谷视频课程,我们继续来学习spring security,下面呢给各位讲解这么一个内容,它叫做CSRF,那我首先解释一下什么是CSSF,给各位做个说明。我这里写下。CSFCRF呢是一个英文的简称,它翻译过来叫什么?叫做跨站请求伪造,也就是一种恶意攻击的一种方法,或者说一种手段,而我们现在在我们刚才的代码喷置中,咱们曾经有一段配置,不知各位是否记得啊,咱看一下就是里边的这段配置,咱之前提到过,就是我们之前测试中等咱是把这个功能给到关闭掉了,所以它默认里边伪劣功能,当然我们目前的网站访中就存在这么一个问题,就是跨站请求伪造一种恶意的攻击方法,那什么叫跨站请求伪造呢?给各位通俗来解释一下啊,其实这个很简单,指这个词说的很拗口,比如我现在。
01:11
我在浏览器中啊,打开一个网站,打开之后我把网站中的内容,比如咱们已经进行了认证,或者进行登录,假如我在上回谷的网站进行登录,然后我里边呢,比如说我在打开一个其他的网站,那这其他网站是不是也在我同一个浏览器中啊,那它是不是能得到我当前浏览器中的所有的cookc信息,因为我这是两个不同的网站,比如我这上一个网站,这是别的网站,那我别的网站在我当前浏览器中能得到当前所有的空域信息,那我是不是能得到网站中的所有内容,这么做是不是很不安全呀?这就叫跨站请求这么一个攻击,因为咱们理论上我只有在上微谷网站中的所有链接才能访问,我别的网站不能访问到里边,咱们认证之后数据,所以这个就叫做跨站请求伪造,但是目前我们把这功能给它关闭掉,它是存在这个问题的。
02:10
这个不知道各位是否能理解,一个已经认证之后的网站,别的网站在同一个浏览器打开,能够访问到或者伪造到里边一些内容,这里边会造成一些攻击性的这么一些事件发生,所以这个是很完全的。而在spring security4.0开始,其实默认情况下,这个功能已经给它开启了,我们之前测试为了方便给它已经关掉了,默认是开启的。但是里边呢,有一个特点就是这个东西啊,它是针对什么呢。这些请求进保护,比如说啊,如果你是get请求,那它不定保护,比如你是post请求,Put请求,比例的请求会进行保护,就这些请求只有在当前你自己的网站中才能访问,你换一个跨站的网站,它是不能进行请求的,他把这些做了一些处理,因为大家注意啊,咱应该学到一个叫瑞的风格,我们一般来讲这个post提交针对是不是添加呀,Put是不是修改比例呢,是不是删除,所以你针对数据库修改的操作,它对这里边进行了保护,它就预防到了,这个叫跨站请求伪造,所以这是咱们解这个概念,叫CS iff,各位把它理解跨站进行伪造,然后这个在我们诗句中该怎么去用,其实用法很简单,咱们只需要第一个你把这句话给他。
03:41
注释料,注释料是不是就开启了,然后第二个我们在登录页面中加上这么一个隐藏项,就可以做到就那么个配置,那这个原理是怎么样的,给各位来说明一下,然后咱们看一下我们这个这代码,这个代码我就不重新写一遍了,因为里边就是改一个配置,加一段话,其他地方不需要变,我提前写好一个例子,比如说咱们做个测试,现在我先说一下它的底层的一个过程是怎么做到的。
04:10
给各位强调啊,就是他做这个跨站请求,伪造这个预防怎么做到的,比如说咱们在认证之后,我这里边怎么做会生成一个token,注意是一个token token你列为呢,就是按照一定规则生成一段字符串,然后把这token保存到我们的session里边,或者说保存到cookie中,而你每次请求都带着这个token值进行请求,拿着你每次传来的token值和你session中的内容做比较,如果两个一样,那我们就允许访问,如果两个不一样,它就不容易访问,就是预防这个跨站攻击,因为你跨站攻击这拓什么值你肯定不知道,每次他都不一样,再用这种方式做这么一个预防,给各位把这效果简单画一下啊,比如现在。
05:05
我们这里边,呃,我画一下啊,咱通过客户端我发送一个请求。这客户端发一个请求,然后在请求这个过程中呢,咱肯定要做一个就是认证,就这位置我们要做一个叫认证,我写一下。然后当你认证成功之后,咱就这里边会做件事情,做什么事情呢,他会给我们啊生成一个。Token字符串,并且把ton字符串存储到你的session的U堆项中,或者说存到cooky中去,我们存到三里面去,这是他的第一部分,然后比如说我们现在这里边我在发送请求。那怎么做?咱的做法就是我们要带着这个token字符串进行发送,因为它要存到session,或者我们到cookie里边去,咱要带着它发送请求,而带它之后这里边会怎么做?这个位置会做一个比较,比较就是你传递过来,或者说你。
06:11
带着过来的那个token那个字符串。和session里边存储的token是否一样,如果一样的话,让他完成认证,做我们的访问,如果不一样,那他不让他进行访问,就让他受保护,这就是一个基本的原理,通过一个token和session里边做比较,每次传递这个值,给它做一个最终操作,这个是一个基本的过程,各位把这给它知道。然后这个说完之后,下面呢,咱们来看一下它的源码部分,通过源码部分看一下里边一个基本过程,这里边呢,它也用到了一个过滤器,这过滤器很好记,叫做CSRF。Filter就这个过滤器,咱给它打开,然后在过滤器中,这是做CSR防护的过滤器,我们找到do filter方法,就这个方法,然后方法中怎么做到呢?大家注意啊,首先你在操作中,它在这行代码中,你看这个代码是不是叫not token在这里边会怎么做?
07:20
生成一个token,并且把token存到我们的section里面去,这代码会在这个事情,然后做完之后,下面这里边就是拿过来你参数中那个,你看这个啊,叫get perimeter name,其实它得到是你表单传过来那个图值,然后后面表单中会设置一个值,他把这个给你得到,然后得到之后怎么做,下面做这个判断,比如说你这里边你这个传过来的图问值跟你三中的值不一样,那他给你直接抛个异常或者做处理,如果一样的话,他再做另外的处理里边这个过程。但是咱们可以看到细致点啊,在这里边呢,它这个位置用到了这个对象。
08:03
咱们看啊,这对象里边的有一个参数叫default,咱们把它点开,大家看这位置。我觉得各位应该能看懂啊,这是一个哈西,Set里边有几个get he,就是提方式,什么意思,就表示在我们csf防护的时候,这几个它不做保护,比如说你get提交等等其他提交不做保护,它只针对post put比例的这些方式进行防护,所以里边你看这个过程,然后咱再回来,如果它不匹配做这个事情,如果它这里边匹配到它在里边做这各种处理,然后最终做放行。所以在它的源码中就是这么一个过程,就是把这个认证之后,这种token存到30里边每次携带token进行请求,然后拿着现token跟session里边的内容做比较,如果他们相同进行访问不相同,那就不进行访问,里边就这过程。所以咱们现在通过源码也作为查看它的主要代码,就是在这个csf filter里边给我们实现出来的。
09:12
这个啊,我们就做了一个说明,然后说完之后,下面给各位来试一下这个效果,这是我提前写的一个小例子,这例子很简单,咱们快速看一下啊,首先第一个。在po文件中呢,我是引入了这么一个,就是。模板的这么一个组件,这个组件大家看一下啊。叫timeless leaf,这个组件咱更好支持这个spring保括留框架引入了它,其他部分没有什么特别的,主要是加了这么一个组件模板,然后加入之后在里边咱来看啊,首先我这边有一个配置类,就这个conig vision,然后在里边你看都是咱之前写到的user detail,然后这个设置你那个路径可以访问,可以不可以访问,然后包括设置我当前的登录页面,登录页面我是用个control直接给它返回到这个页面,你看啊,捞印捞印。
10:09
这各位应该能看懂啊,包括里边咱们这个位置默认之前我们应该给它都是让它就是关闭了,但是其实默认它是给它已经打开了,咱先这么做,比如设测试这个是一个配置类,跟我们之前写的基本上一样,就这么一个写法啊,然后这个选完之后咱们看啊,我这位置写了一个CTRL。这是烙印到中页面,然后这是csf测试,里边有两个都是到不同页面,然后这个页面我是写到这位置,然后这个user t中没有特别的,我是默认就用LUCY123进行登录。啊,这是一个基本代码,各位给都知道啊,这是配置类,这是两个CTRL了到不同页面,然后这是查数据库的,我这里就是写固定的LUCY123,这是情类,最后两扬页面用到我们那个模板,就是咱说那个time里t lef这个模板。
11:03
把这个点开啊,在模板里边,第一个这个位置叫CF test里边呢,就是一个登录页面,模板中就是有写到的这么一个写法啊,没有特别的,然后第二个这里边就是得到你投问值,首先你看啊,我先这么测试,我现在呢把这个防护先给它关闭掉。Disable呢,关闭,咱们先做测试,然后一会儿我把这句话再打开,咱们再做个测试,咱看一下它分别有什么样的效果。我们来试一下啊,首先我先打开,然后咱访问,访问的话呢,我就直接访问这个CTRL的,因为它要到我们这个CSFT页面里边有咱的表单页面。我们来访问一下啊。然后咱们回创。啊,这里边啊,我们先稍等回车一下啊。
12:01
那我们看一下啊,这里边应该有一些其他内容啊,咱们把它稍微改一下啊。啊,这个内容是什么呢?各位说一下啊,你看现在暴力错,因为我现在啊,把这个防护是不是关掉了,但是我这里边还加了这句话,所以这句话我先给它注掉,为咱暂时还没有写到先注掉啊,然后包括这里边这句话,目前这值应该取不到,因为咱没有这个值给它也是先注掉,我就随便写一句话啊,这就来一个。太子的刚才报的这个错,因为这个值我们那个防务功能关掉它没有先给它不掉啊,一会咱得打开,那我重新启动做个测试。刚才报说这个找不到吗?咱确实没有功能已经关掉了啊。那我现在测试to update。你看是不是到我们的登录页面,在里边,我用LUCY1231登录是不是可以了,就是这样的话,应该没有任何问题,完全可以,当然比如现在啊,我进一步测试怎么做,我把这段话给它蛀掉,蛀掉之后什么意思,就表示你的防护功能已经开启了,它具备了csf防护,需要做咱们刚才说那些验证。
13:18
那我现在把它重启一下,咱们再来试一下这个效果,看它是什么样的啊,再来试一下。我们现在还是来到我这个controller to。Update,然后在里边LUCY123登录。你发现啊,是没登进去啊,它跳转到什么地方了,因为我这里做了一个配置,它就到了我的这个位置,你登录失败吗?到这个user色烙印里边去了,它目前是到这个位置,所以你发现当我把这个开启之后,我再做这个认证是不是就进不去了,因为我们这个登录的页面中的提交方式。大家看是什么?
14:00
是post提交,咱说过如果你是gett没问题,但是post提交它里边做了保护,所以它就不能让你进行这么一个认证,你需要做这个csf这么一个判断的过程,那咱怎么做?很简单,做法就是我们在表单里边呢,加上这段话。把这个打开啊,这段话什么意思,咱看一下啊,用到我们这个B就是模板代码里边就是得到你CF那个就是名字,还有它的值,就是咱们每次生成那个名字和值,然后把它传到我们那个请求过程中,跟三里边内容做比较,所以咱们需要在页面中加上这段话就可以了,包括我把这个也打开,咱一会儿也做个输出,看一下这个值。到底是什么这个啊就可以了,就是加上这段话就可以了,不需要加别的,然后下面我们再启动再来试一下啊。所以这个代码其实很简单,就是你把它打开,然后在你登录页面中加上一个隐藏项,传入你的名称,还有你头N值,用这种方式就可以取到,就这么一个做法,然后咱们试一下啊,我们到里边。
15:14
Two。Update,然后我们用LUCY123修改,大家看这个得到的就是它那个token那个字符串,而现在咱们再通过这个这么来看一下啊,比如说我们先到这个页面。咱看下边啊,大家看这个位置。就是。这里。你看啊,它的名字叫下划线csf,然后后面这个值就是里面那个生成一个token值,咱通过这个表单隐藏项,每次传回来跟三人里面做比较,所以它就能够完成这个防护的功能,这个啊是咱们演示的这么一个效果。这个咱就做到了啊,然后过程中大家知道它的做法就是第一步在配置类中把这个开启,第二步在页面中加个隐藏项,传入你的token的字符串,然后它的源码是在我们刚才看到那个过滤器中,刚才咱们也看过了。
16:15
CSRF。The。在这里边有它那个就是具体的源码,包括源码中就是生成token放到30里面去,然后把传回来参数跟30里边做比较,如果不一样,如果一样它做不同处理,这个啊咱们就演示完成了,关于csf跨站请求伪造。
我来说两句