粉丝3501获赞3.0万


呃,这次我们讲一个非常实用的功能啊,就是说在 ktv 上如何对请求然后做签名验证。呃,我们签名验证一般使用在什么场景呢?主要使用在就是说验证访问者的身份,还有另外一个就是说签名的另一个作用就是说 验证内容有没有被篡改。呃,那身份认证的方式呢?其实有很多,对吧?像奥斯兔啊这种,然后他是权限控制的比较好的,然后还可以授权给第三方。 呃,但是他一般是用来做一些那个资源授权之类的啊,就是一般的请求健全的,我们是用的这么复杂的方式的。呃,另外一个就是说用名密码,用户名密码呢?就是也是非常常用的一个。呃,你像我们登录微信或者支付宝的, 呃,他们的一些提供的一些接口啊,他是要通过一些用户的密码获取一个啊头啃啊,然后每次请求都要带上头啃。呃,那还有一种就是说用签名的方式啊,签名的方式是可以验证用户身份的,他的一些使用场景呢?主要是验证一些非用户类的一些屌用,比方说, 呃有第三方的服务来调用你,那如果你不用用我们密码这种方式的话,想用一种简单的方式,那就可以给他一个呃签名的密要,然后做一个签名认证。呃,另外的就是说,比方说你有个 app, 对吧?然后 app 呢?然后访问呃服务器,那你怎么能够防止一些 呃非 app 的请求,然后来访问你的服务器接口呢?就是说你在 app 上可以做一个签名密要,然后每每个请求都做做一下签名,这样如果有人想访问你的服务器,你就必须有这个密要啊,那获取这个密要的方式呢? 只能说是把你 app 的加密壳砸开,然后找到这个密码,要不然的话他是没有办法访问的服务器的啊。就是另外一种,就是说啊对安全要求性不高,然后只是想做一些呃比较初级的安全的一些验证啊,都是可以用来这个签名来做这些的啊。 呃就是一般的签名呢,我们如果没有呃对于这个内请求内容做验证的话,我们一般不会做请求的内容做验证,因为 呃对内容做签名防残改的话,那需要在网关层把请求的请求题提取出来,然后呢还要放回去,这个是比较影响性能的,我们看一下他的一个实现啊,像这些名字啊,这些名字都是参考阿里云的那个阿里网关,然后来起名了啊。另外他的这个签名方式也是对阿里的网关的一些请求方式做了一个 简化啊,然后有兴趣的可以把阿里的网关的他那个呃就是说客户端的包,然后嗯拿到散编一下,就可以看看到他的签名过程了,然后我们看一下他的一个呃逻辑啊,这些名称呢,我们先讲一下签名的一个实现逻辑,签名的一个实现逻辑呢,就是说把 一些请求上的一些信息,然后从请求头上传过来,我们取到这个请求头上的信息呢,按照一个规则啊,按照表示,我们就按照这个规则给他拼成一个字符串,拼成一个字符串之后呢,我们对这个字符串,然后呃做一个哈西啊,就是说做一个 ss a 二五六的一个哈西,这样就会得到一个 呃,就是说哈西后的一个值,我们拿这一个值呢,然后跟请求他在头里边传过来的一个签名啊,一个签名的值,然后做一下对比,如果一样的话,那就是认为,认为就是签名通过。因为我们在做这个哈西的时候,他其实是有一个呃言啊,就是我们叫密奥啊,就说呃来参与的,所以说只有 请求法器方,然后呃有正确的民谣,他哈吸出来的值才能跟我们服务网关层这个哈吸出来的值能够匹配上。 他这个签名呢,其实是有很多种,你像我们用 sha 二五六这这个呢就是说需要,就是请求跟服务器方用的是啊一个密药,然后还有一些非对称的一些签名啊,就是这些呢,就是说请求的跟服务器上的密药呢,他不是一样的,请求方做的签名,然后服务器方做验证啊,他用这非对称密药,然后来做的 呃,这些都可以去学习一下,有哪些签名的一些实现啊?这个呢只要把这个签名方式替换一下,签名验证方式替换一下就可以了。然后呢我们来看一下,就是说 呃,我们一般的拼的呃这个串有哪些呢?就是说他会给每一个呃,就是说请求的方,然后分配一个 king 啊,然后这个 king 是要在请求头带过来的,他要参与这个呃哈西制的生成。另外一个就是说要有一个时间戳啊,时间戳是 干嘛呢?时间戳就是说呃防止一个请求被拦截之后被重放啊,就是说比方说我把这个请求拦截下来,那这个内容就一直可以放在复习,对吧?那我们有一个时间戳呢,在请求呃来的时候对签名做验证的时候,我们做一个时间上的验证啊,如果这个验时间,比方,比方说超过了十分钟,然后比当前时间早或晚十分钟,我们就认为这个请求就无效了,这是一个时间上的验证。 另外一个就是说版本这个是没有什么要求的啊,另外这就是说,呃这是签名的生成的哈气值。另外签名的一个方式,这个方式呢,呃我们可以配在服务器端也可以呢,就是说呃在请求方,然后给传一个,一般我们配在服务器端是比较安全的,所以说这个是没有启动的。另外一个就是说要有一个随机的值啊,随机的值就是防止,呃,就是说这个 请求,然后每次生成的他的哈西值一样啊,所以说弄一个随机数,然后他就会不一样了。另外一个就是说,呃内容摘药啊,内容摘药,就是说请求的时候把请求的呃发送的内容做一个哈西,如果我们服务器端需要对请求的内容做一个是否参改的验证的话,那就可以用它来做一下,但是这个就像刚才说的,他需要把请求题拿出来,然后并且呢是呃 运算了完之后还要把请求题放回去啊,这个呢就是比较损耗这个性能,所以说一般呢没有特别安比较高级的安全需求的话,这个是呃可以不做啊,那这个签名认证过程就简单了啊,就是说前面就是说呃验证一下这些参数有没有,呃。另外一个就是获取这个签名,获取签名的过程呢,就是呃 生成,这是先呃生成一个他的那个呃字符串啊,就是说把请求头里边的相关的字取出来,然后拼成一个字符串,拼成这个字符串之后呢?呃如果拼成了之后呢,他就会用这个生成一个签名啊, 计算,计算的过程呢就是呃这是生成的字母串,然后这是从请求头里边取出来的,呃就是分配给定方的一个 king 啊,然后我们需要找到这个 king 对应的一个密要和他的呃加密方式啊,这个呢,我非常简单的就是说在这个配置软件里边配了一下, 然后那我们就可以直接从配置文件里边去取,这如果要做成很多个客户段调用的灵活的方式呢,那就需要有一个管理后台,然后最好呢是呃把它写到 redis 里边,然后从 redis 里边取出对这个 key 对应的它的米尔跟这个加密方式。 redis 里的数据呢,就需要有一个管理后台去管理啊,去写入 我们取到它的 vr 和。呃加密类型呢,我们会用加密的一个工具类对它对这个 br 做一个呃这个哈西,然后用它哈西出来的这个值啊作为一个签名的呃结果,然后这里边这个签名方式都是一些通用的啊,然后那它的结果出来之后呢,我们就是取到了这个签名的数据,然后那跟请求投里边,这是从请求投 取出来的,就是客户端发送过来的签名做一个对比。呃,只有这两个值一样的之后,我们这个 filter 才算是通过啊,这就是一个签名的过程啊,那我们可以来验证一下啊,比方说我们就是直接用,直接用这个状态啊, 直接用这个状态接口去验证一下,比方说现在是没有签名的情况,没有签名的情况呢,那我们就去调一下,然后这是通了,对吧?然后那我们加上签名, 加上签名呢?那你直接掉他就是不通的啊,你必须是在请求头里边把对应的参数都附上,他才能通啊,就比方说现在是没有这个呃时间戳字段,所以说他不合法。嗯,刚才呢,我们说到时间戳啊,其实进来之后呢,呃他是有个时间验证的啊,我们看看 这是取到了时间戳啊,这是有个差时间,对吧?就时间戳呢,其实就是一个呃号秒级的一个时间单位,然后呢我们就是用这个号秒级的时间单位给他算一下前跟后的时间单位,如果当前时间,然后不在这个时间段范围内,那就说明这个请求已经超呃早于或者晚于这个当前时间十分钟了。然后我们就认为 这个是不方法的啊,这个时间是可以调的啊,可以调的,就是说根据你限制的要求可以调。那我们再看一看这个测试类啊,就是说这个测试类就很简单,就是说,呃 这一些呢,就是说这 pens king, 然后时间戳,然后随机数,还有这一些呢,都是那个呃他请求的一些参数,然后需要用来做签名了,然后这个签名呢,就把这些纸放到一起,然后生成一个字母串啊,他跟那个福气和签名是一样的, 然后就是说在请求头里面把这些设置上,然后,呃,这是签名,签名是用一个加密的一个就是说这个方法,然后生成的,做了个哈西,就是,然后这个也是一样的,然后,呃下边呢就是说是,呃,就是一个请求题啊,一个请求题随意写了一个 jason, 然后呢?呃,下边就是一个 hcb 的一个请求啊,我们来看一下他的一个调用啊,刚才我们看加上签名之后是直接调调不通了 啊,那直接用这种方式就是可以调通了,对吧?啊?这就是一个比较简单的一个签名的一个网关啊,那这个东西 其实就是生产级别的一个网关了啊,其实你可以就是把这个东西用到生产生产上了。嗯,另外呢这个代码呢是放在,嗯,就是说同名的玩 capace 的就是这个啊,这个名称的一个 get e 的代码仓库里边,大家可以去这里边去直接找这个代码啊。那么今天就讲到这,嗯。

零基础学 it, 月薪过万就来黑马程序员,黑马程序员成就 it 黑马。 接下来我们继续来学习卖票这个案例,这次我们要解决的是卖票这个案例中的数据安全问题。 那么在解决这个问题之前,我们再来说一下我们为什么会出现问题。注意这里我们说的这个问题,他也是我们判断多线程程序他是否有数据安全问题的标准。来我们看一下,第一个我们就要看一下他是否是多线程环境, 如果是单县城环境,他是不会有问题的。那么第二个他是否有共享数据,如果你是多县城环境,但是你如果没有共享数据,他也不会有问题。那么第三个我们还要看是否有多条语句操作共享数 数据。也就是说你即使是多现成环境,你还有共享数据,但是你只要没有多条语句操作共享数据,他也不会有问题。但是如果你这三个条件都满足,那么你肯定就会出现数据安全问题的。好了,知道了这个之后,接下来来 我们去看一下我们的程序,看这里啊,我新建好了一个包,在这个包下新建好两个类,那么这是我们的测试类,在这里面我们这里有三个现成,很明显这是一个多现成的程序。 接着再来看这个 tx 等于一百,他是我们的共享数据。再往下看,这里有一个判断,这里有一个输出,这里有一个简简操作,那么这就是我们多条语句对共享数据进行 操作,由此可见我们满足了这三个条件,所以说我们的程序他就会出现数据安全问题,那么接下来我们如何来解决多线程安全问题呢?那么基本的思想很简单,就是让这个程序没有安全问题的环境,也 就说我要破坏掉这三个其中的一个就好了。那么首先说多现成环境这种我们破坏不了,第二个共享数据,这个我们也解决不了,因为我们现在就是多现成环境下来使用的共享数据。 那么第三个多条语句操作共享数据,也就说我们只能想办法在这个上面做一些操作了,那么怎么操作呢?来我们说一下,把多条语句操作共享数据的代码给锁起 起来,让任意时刻只能有一个县城执行,也就是说我将来要把这段代码给他锁起来,锁起来之后呢,我在任意时刻只有一个县城进来,那么这一个县城进来之后,他在里面怎么操作他都不会有问题。 好了回来我们继续说一下,那么我们又该怎么来实现把这个操作共享数据代码给锁起来呢?加瓦提供了同步代码快的方式来解决。来 我们来说一下同步代码块,所多条语句操作共享数据可以使用同步代码块来实现,那么接下来我们来看一下同步代码块的格式, 深口 nice 的后面跟了一个小括号,里面放了一个任意的对象,然后大括号这里面放的是多条语句操作共享数据的代码,也就是把多条语句操作共享数据代码放到 森克奈子的所控制的这对大括号里面就可以了,这样就把它锁起来了,那么在这里我们说一下森克奈子的后面跟着这样一个东西,就相当于给这段代码加锁了,那么这里的任意对象就可以看着是一把锁好了,知 到了我们这个同步代码块的格式之后,接下来我们到程序中去解决一下我们的数据安全问题,那么现在我要把这段代码给他锁起来,怎么锁呢?就用我们的同步代码块来看一下啊,松口带子,你看 你写个 sy, 他就出来了,接着一回车,那么再接着把这段代码给他包起来,然后在这里我们要来放一把锁,那么这个锁给谁呢?我们说了是任意对象,所以我在这里直接扭一个 offit, 他就可以表示任意对象,那么这样做完之后,我们这个卖票的程序他就应该不会有问题的。来我们看一下,这次应该是没有问题了,接着我们往下看啊,多个窗口卖票往下走,哎, 不行啊,又出现了相同的票,被卖了多次,那说明还是有问题啊,那接着我们再来右键执行看一下,这次我们卖票有问题吗?你看一下多个窗口卖票还是一样也会 出现这个问题,那说明我们并没有解决我们的这个数据安全问题啊,那为什么呢?来回来我们说一下,来看一下啊,我们在这里有三个县城启动,那么每个县城执行到这里面的时候,他都能走到这里,走到这, 他看到这里是什么同步大马块,但是呢,你每一次都是尿了一个,哦不,也就说针对这三个县城,你用了三把锁,所以说他是锁不住的,我们应该用的是同一把锁,那么在这里我们就应该把这个锁对象定义到外面 看一下啊,你有一个 office, 那么这个时候就不能写,你有 offer, 我们来给一个 obg 好了,来看一下,这样不管你多少个县城过来,我看到的是同一把锁右键执行,这 这次我们再来看,还有问题吗?来看一下啊,我们这次三个窗口卖票,他出现问题吗?你看一下这次窗口一从一百张一直卖啊,窗口二,窗口三来,然后卖票来, 接着往下看,你发现这次应该没有问题了,对吧?因为他什么是按照顺序来的吗?你看一下卖到第一张票了,好了,到这我们就解决了我们这个多现成程序中的数据安全问题。来 回来我们说一下我们的解决方案,就是使用这个同步代码块,把我们的这个多条语句操作共享数据代码给锁起来了,重点就是这个锁来保证的我们的数据没有问题,那么在这里我们再来分析一下,让人看啊, 假设说这次我们的 t kitty 他是一百,我现在有三个现成 t 一、 t 二、 t 三过来了,那么假设 t 一 他抢到了 cpu 的执行权,那么 t 就要开始执行,那么看到这里他知道这是同步代码块, t 进来之后就会把这段代码给锁起来, t 进来后就会把这段代码给锁起来,加锁了。好了,锁完之后接着往下判断, tx 这次是一百,一百大于零进来,那接着这休息一百毫秒,那么在这里 t 一他就要休息一百毫秒,那么休息的时候其他县城就可能抢到 cpu 的执行权,那么在这里我假设这个 t 二 他抢到了 cpu 的执行权,那接着他要往下执行,但是他发现这里被锁上了,那么他没办法,他只能在这等,即使踢在休息, 他也只能等。那么 t 休息好了之后,接下来往下直行,那么这一次在控制台输出的是窗口一 正在出售第一百张票,那么再接着往下执行 t x 减减做完之后,这一次 t x 就变成了九十 九。好了,接着再往下直行,走到这里的时候,七一他就出来了,那么出来之后这段 代码的锁就被释放了,那么释放之后这三个县城就可以开始抢了,但是不管你谁抢到,你一进来之后他还是会把它锁起来,只 只能有一个县城在里面操作,那么你只有一个县城在里面操作,他肯定不会有问题呀。好了,到这我们通过同步代码块的方式就解决了我们这个多县城程序的数据安全问题。 接下来我们回到资料来说一下我们这个同步的好处和弊端,好处就是解决了多县城的数据安全问题,他的弊端是当我县城很多时,因为每个县城都会去判断同步上的锁,这是很耗费资源的,那么无形中呢,就会降低我们成 续的运营效率。好嘞,到这关于使用同步代码快的方式解决我们这个多县城程序中的数据安全问题,我们就讲完了,零基础学 it, 月薪过万就来黑马程序员,黑马程序员成就 it 黑马。

大家好,今天我跟大家聊一下扎娃开发实战的网络安全问题, 一共分六个方面啊,包括第三方工具、安全过滤器、数据库防注入文件上传条件查询、阿里云服务器 啊。在项目开发中,很多扎瓦开发人员对网络安全方面不太关注,这样会导致开发的项目有很多安全隐患, 特别是非政府项目,没有三级等保和网络安全测评的要求,很多项目会容易遭受黑客的攻击。本课程就我本人政府项目多年的开发经验,整理了一些项目开发中需要注意的网络 安全问题,以及网络安全相关的功能开发。首先我们看一下第三方工具,我们在项目中经常使用 internets, promecade, readys 等等,还有很多别的工具。 另外呢,在抓把项目本身也使用了各种框架,比如 structurerloxj 等等 啊,不同的框架在不同的阶段啊,可能会发现不同的安全漏洞,所以需要进行及时的更新,例如 nginess 的另另内漏洞需要升级到一点二一,他们 cat 漏洞攻击者可以利用该漏洞读取 或包含他们配得上所有外白 app 目录下的任意文件,如外白 app 配置文件或者 sp 元代码等等。下 是受漏洞影响的版本,包括他们开的六啊七在七点零一以下,八点五点五幺以下,九九是在九点零点三幺以下。 我们的项目是使用他们开的八,所以我们发现这个漏洞之后呢,就及时的把他们开的八更新到最新版本。 那另外还有很多抓娃的,老的抓娃为了不项目使用了四抓四二,四抓四二这个框架呢,多次发现了安全漏洞,呃,去年今年也发现过安全漏洞,需要将四抓四二框架升级到二点五点三零以上的版本。 另外呢,还有关于 spring 相关的几个漏洞啊,其中一个是 springrce 的零零 d 漏洞,那这个是针对啊,这 dk 九以上版本的啊, spring, 那么所以说这个 jdk 版本啊,也不是越高越好,我们现在就是去年发现了几个 jdk 九以上的 spring 漏洞,因为我们项目是 jdk 八的,所以就不受影响。 另外发自真神漏洞,这个发自真神呢,是阿里巴巴的发自真神的包,我们需要将发自真神升级到最新的版本 啊。罗克斯这二的安全漏洞,这是去年出的一个非常严重的安全漏洞啊,不是罗罗克斯这一,是罗克斯这二啊, 攻击者可以直接构造恶意请求,触发远程代码制性的漏洞,所以这个也需要升级到最新的版本,这是第三方工具。现在我介绍一下安全过滤器, 那么安全过滤器呢,就是在发往里面的 filter 啊,另外呢,也可以是拦截器,我们需要在啊 filter 的过滤器或者拦截器中拦截所有的 gsp。 那么对于那个像四十八的二呢,它就使用拦截器啊,是 x。 那么我们拦截器的密也需要做一个安全过滤 啊。安全过例做什么呢?就是解析请求的 url 地址参数,如果 url 的地址参数中有疑似的攻击字符串,则立马返回四零四或者别的错误, 并重定向到错误页面。呃,禁止后续的访问请求。为此我们需要在系统中建立一个攻击字 twelvetreet 字典表哦,我们可以建一个数据库表来维护这些疑似攻击的字不串啊,例如 insert abducts like, 我们建议啊,在那个地址地址川菜里面不要去传 sake 这种语句啊,这种很容易被拦截, 还有回拆转移服等等很多啊,我们需要维护这么一个疑似攻击表啊,如果在请求地址里面一旦出现这些啊疑似攻击串,我们就要进行拦截。 另外呢,我们还要再建立一个 ip 地址的黑名单表啊,只要有疑似攻击,我们就把这个请求的 ip 放到黑名单中,而在过滤器访问中啊,我们先查一下啊, ip 里面这个 ip 是否在黑名单中,如果在黑 名单中呢,就禁止后期访问。如果我们做更进一步的操作呢,就可以把这个黑名单也加到恩金定斯配置文件里面,这样会更安全啊,我们在外部 filt 里面加这个安全拦截,就是可以把所有的 jp 啊, 只要是这样的屁的全部进行拦截,这样的话我们就不会一个个的呃请求去去做处理。 下面介绍一下数据库的房租入,那么在以前的项目里面啊,为了就是大家为了 呃方便啊,经常的使用拼写变量的方式,比如说厦门 voir logoid, 等于这个 logoid 这个怎么串?那么这个 logoid 呢,是从那个外部请求里面过来的,那么这个里面是不是有攻击串呢,就就不 不得而知了,那么这样写的话肯定是会有安全问题的,那么我们应该怎么样写呢?应该使用玉变异的格式,就是下面威尔罗给 id 等一位好,这个是啊, supreme 的 gdpc tambade 啊,使用快瑞 fobject, 然后这个外捞给 id 等于问号,然后这个参数呢?我们在六二八这个里面啊,这这种 通过这种方式来传 newapp 这个的方式啊,这样的话就不会有安全问题。如果我们在程序代码中使用上面的 vrlogid 这种拼接并亮的这种方式呢,在项目中是很危险的, 而且在政府项目中是不能通过代码的。白河安全检测的,这是 sai 口的注入。 下面我介绍一下文件上传的安全问题。文件上传一定要注意判断文件的扩展名,例如传图片就只允许传图片文件的啊,就是只允许传啊,图片文件扩展名 如果不受文件扩展名的判断,上传了点 gsp 的程序文件,这就是严重安全事故了,因为这个 p 呢是可以执行的,所以我们 呃就需要在任何文件上传的位置都要增加扩展名了。判断不允许上传动态的,可执行的程序文件,最好是限制上传文件的目录不能运行这样的批,比如我们指定了啊,不露的目录是只放上传文件的,那么就 不允许在这个 abloat 的幕楼里面执行 gsp 啊。比如说我们在可以在 ngines 里面去写一个规则,就是禁止 abload 的访问访问 gsp, 或者是我们在过滤器里面判断婴儿的请求啊,请求里面如果还含含这个按斜线 aplow 的这种母乳的 jsp, 那我们就禁止他执行。 下面介绍一下条件查询啊,在我们程序的后台界面上有很多啊,数据列表啊,比如说啊,人员答案啊,这个很多数据列表中都有很多查询条件, 那我们在做查询条件的时候呢,呃,就不要查询处理,就不要在前端的网页里面写拼写 jessica 的查询语句 啊,因为这样的话不仅不安全呢,也容易在过滤器端或者 wifi 防火墙中拦截这种带塞口语句的请求,而是我们应该把这种参数传到控制层,然后在控制层中进行查询处理。 那我们早期的项目很多功能都是在前端啊,拼写查询条件,然后拼写这个语句之后上传到后台,那么客户上了 wifi 防火墙之后呢,很很多功能就不能用了,因为这种请求都被 wifi 防火墙给拦截了 啊,这是我们在同学开花中要注意查询条件啊,不要在前端拼下塞口语句。另外介绍阿里云服务器中的安全配置,主要是讲一下啊,阿里云里面的安全组的配置 有,在阿丽园服务器里面,我们需要配置安全组。那么对于八零只是 atdp 的端口和四三 htps 端口是可以全网断公开的, 但是对于二二端口,这个一般,这个是 ssh 的啊,二端口,那么我们一般是使用 cicocrt 工具啊进行连接,那么像二端口必须只针对管理员的 ip 开放, 不然说不定什么时候呢,我们的服务器就会被黑客攻入啊,这样的话,即使我们的服务器的补丁打的不全,因为我们限定了啊,通过二端口只允许我们自己来批返回进去,比如说我们家里来批啊啊,这样的话就不会担心服务器的漏洞被利用。 好,今天关于网络安全啊,就介绍到这里,谢谢。