我这款极速下载器这个主界面就是套壳暖气,为了就是在页面上下载资源时啊,例如我下载这个资源,我点击下载时会被我这款下载器所激活,只要点击极速下载就会直接弹出极速下载器,这个文件名称都可以直接补过来, 不想手动去输入。还有这个 copy 也是也能自动捕获的,捕获当前这个页面的 copy, 这样的话就这下载器也能保持登录状态再下载资源,这样就是 ok 的 了。
粉丝7710获赞4.8万

高手们,今天我们来讲解一下如何实现我们的单点登录哈,这是我近期小伙伴出去面试遇到的一个高频面题,如果你看到这个题目在你的心中没有答的话,那么让我来给大家讲解你的点赞,你的关注是我持续的动力。 首先我们要知道什么是我们的单点登录啊?比如我们这个天猫和淘宝你登录了一个,那我们的另外一个可以直接进入,对不对?那么实现我们这个单点登录,它有很多种方式,最简单的方式是第一种哈通过我们的基于我们的 cook, 因为我们这个 cooking 他默认是不可以快于共享的,但是在有些情况下,我们可以设置快于共享,比如让我们的主域名相同,通过我们设置 cooking 都门。比如我们来看一下这个百度点 com 和我们的 inmate 点 inmate 点,百度点 com, 他们两个就是通过什么通过我们的设置我们的 cooking 主玉米相同来实现我们的跨越共享的。来看一下,首先我们这个百度找到我们的百度点 com, 找到百度点 com, 首先来到我们这个网络找到的百度点 com, 找到来到我们的响应头部, 想用头发,你会发现在这里设置的什么设置呢?我们这一个都闷点,把主域名都闷啊,等于点百度点 com, 那么再来看一下我们的百度图片,百度图片来看百度图片它的主域名都是相同的,来看到这里设置了一个,来到我们这里 打印头部找到我们的设置,我们的 cooking 在这里设置呢一个我们的多闷啊,多闷点百度点 com, 那么这种方式通过 cook 的方式干个什么呢?可以处理我们这个单点登录,但是他有个前提条件,就是主域名必须是相同的,那我们在工作当中可能有我们的主名不 不相同,那么怎么来实现呢?这个时候就要使用的 sosso 单点登录,那么什么是我们的 sso 单点登录呢?其实它本质就是个第三方的一个认证中心,那么通过我们这个这张图带大家来彻彻底底来理解啊。 首先我们这里有个客户端,这里我们的系统 a, 系统 b 和我们的认证中心,也就是 sso, 那么当他们的域名都是不同的,比如 a 是 a 点 com, b 点 com, 这个也是不同的。那么当我们的客户中心啊,当我们的客户端 用户访问我们这个 a 系统的时候,刚开始的时候,你访问进去,先检查一下你有没有凭证,如果没有凭的话需要登录, 那么这个凭证是在哪里捡的?首先一进来没有凭证的话,登录重定向到我们的 sso, 就是我们的认证中心,去访问我们这个 sso, 来到我们这个 sso 的时候,如果你没有凭证啊,验证失败,干个什 什么事情呢?这个时候来到我们的登录页面来,我们登录页面,在登录页面输入我们的用户名和密码,用户密码输入完之后来到我们的认证中心,又来到我们的 sso 这个认证中心,待到我们的认证中心之后,认证成功了,带上我们的 top, 就是我们 sosso 中的认证,把它存放到本地,存放到本地,这里要注意呢,前端的时候用我们的 local story 级,用我们的 local story 级可以什么?跨越共享存放到本地之后干什么事情?这个时候你就访问我们的系统 a, 带上我们这个认证哈。托肯访问系统 a 的时候,在系统 a 里面还要干什么?对这个认证,对这个托肯,对这个凭证要进行验证。在这里认证的时候,也就是我们的 sosso 这个 sso 来验证我们的登录的哈,在这来验证的时候,如果验证成功了,把你的用户这些信息给拿上,再让 女士们访问我们这一个系统 a 里面的一些业务,这个就是我们的单点登录哈,就是客户在访问我们的系统 a 的时候干什么?你需要凭证,如果你没有凭证,这个时候你需要来到我们这一个 ss 认证中心, 那么你访问的时候是我们的登录这个操作,这个登录的操作他你的发的请求也是我们的 s s o 啊,来到我们的 s s s o。 在这 s s o。 如果你们有了, 有呢?我们这个认证中心,但是你登录成功了啊,登录成功之后,你就把它放到我们的本地,通过我们的 local story 级来进行存放,存放完之后,这个时候你再重新上,再来到再访问我们这个系统 a。 访问系统 a 的时候,这个时候你需要干什么事情呢? 还要再验证一下,如果验证成功了啊,再来到我们这 sso 认证中心验证一下,如果验证成功了,有我们这个啊,验证成功了,把用 信息给带上,再去到访问,我返回我们的系统 a 的一些业务操作,看你们的页面,那么你这个时候 已经来到我们这个系统 v 已经登录成功了,那么客户端在访问我们系统 b 的时候,因为你之前在本地已经通过洛克手里存放了我们的认证,那么你直接访问系统 b, 访问系统 b, 在这里你就只需要干一个操作,在这里先验证一下 验证来,来到这里,首先来到这里验证一下,到就是走到这一步了,一进来的时候就走这一步,因为有托肯了,成了本地的验证,我们这个托肯来到这里,来到我们 s s o 认证中心验证这个托肯, 你有了这个图肯,有了这个认证,那么直接把你的信息给拿到,再返回我们的 b 的业务,这个就是我们的 s s o 单点登录,也就我们的认证中心把这个图给他画一遍,画一遍之后干什么?又彻彻底底理解了我们这个单点登录。

猿人学的第九题的网站页面看上去竟然和某点评的页面差不多,那么它的前端插件又采用了什么呢?今天就带大家来实战难度指数三颗星的猿人学动态库的第九题,那么今天我将带领大家来挑战的是一个高难度的题目, 那么今天我们来看像猿人学的这个网站,它的题目是有划分为有简单、中等的以及困难和非常困难。那么我今天将带大家来完整的处理一个叫做 g s 混淆动态库,也就是它当前的题目九 对吧,它里面进行了高度混淆,难度级别也是为非常困难啊,大家, ok, 那 么今天我们就来刷一下它,看一下这个加密啊到底咋样,我们看能不能把它搞定,需要更多爬虫逆向学习视频以及啊海量的爬虫项目员吗?可以点击我的主页来进入我的抖音粉丝群来进行获取。 ok, 那 么首先我们来看一下啊,我们先来进入这个哦, 来,我们进去,然后进去之后这个是他的任务啊,采集当前的五个页面,对吧,并且所有的商家的评论数量来计算他的平均数,然后填入到我们的答案当中。 ok, 那 么在这里我们首先来看一下啊,这个页面搞的有点像那个大众点评对不对?各位有没有发现好,那么在这里我们来看一下他,我们向下滑, 下滑的话可以看到有分页,总共是有五个页面,来,我们鼠标右键点击检查,打开工具,然后我们像在开发者工具当中啊,先来进行一个基本的数据的一个采集,我们来点击分页,来分页,分页之后他告诉我们 cookie 失效了,对吧?尝试页面的刷新,我们可以看到它里面是有,哎,还有反调试,对吧?反调试我们先不管它。 来,我们来看啊,那么像在这里啊,我们先来生成一个 python request 的 一个代码,来,我们来看啊,那么像在这里,我们首先我们先找到它的数据接口,我们可以看到这个是不是它的数据接口,然后它里面会有个 value 的 一个值,这个 value 里面的值啊,就是我们所需要的一个数值,我们鼠标右键点击复制里面的 c u l 我 们的 base 的 一个格式, 那么在这里我们通过咱们的一个在线的一个网站啊,来快速生成 python request 的 一个代码,来生成一个 request 的 一个代码,然后生成完成之后我们把它拷贝,然后我们来新建一个 python 的 文件, ok, 那 么今天的话是猿人学的第九题,是吧?然后我们右击来新建一个 python 的 一个文件,这个是 demo 九啊,也就是任务九,好,然后的话我们来新建一个 python 的 code 文件, ok, 那 么当前这个代码是把它也带来过来的, ok 的 啊, 好,那么像我们 ok 之后,在这里我给大家讲一下,就是我们很多同学们对于一些基本的 response 啊,可能有点不会处理,你要记住啊,像我们这种,你看我们当前请求的这个数据,我们一般返回的格式应该是什么?那么目前我们如果说想来,对吧?对我们的 response, 也就是服务器它所返回之后的数据来进行一个解析。 我们首先啊,我们是要看一下网页端,在网页端当里面我们是可以去看一下它的,让我们先发现一下页面啊,稍等一下,会过期的。来,你看我们像在这个页面,我们首先我们要先做一件事情,我们需要来做什么呢?我们首先我们需要在这个页面当中啊来观察一下它,嗯, 来你看啊,来看一下啊,我们来看一下啊,点击下一页,我们可以看到它里面会有个 response 的 一个标头,下面有三个部分,常规响应标头和请求标头, 那么我们观察一下在请求标头当中,它的 content type 是 不是回我们的一个接受,所以啊,我们在这个地方啊,是可以直接使用点接受的一个方式把它转变,然后使用 print 打印我们的 response, 那 么这样我们就能够成功的来得到它的数据来进行运行, 然后运行之后呃告诉我们,呃失败了,对吧?不会请求失败呢,像它这个界面里面主要就是一个 cookie 的 一个加密,一个 m 值,对吧?一个 cookie 加密,那么我们一般遇到这种 cookie 的 加密,我们首先啊要了解一下 cookie 加密是由谁来生成的,这非常重要,你们要记住哦,一般 cookie 都来源于我们的光盘头, 大部分都是 dom 的 点 cookie 的 一个形式,对吧?所以我们在座的朋友们,我们需要去注意一下,因为我们在很多时候去进行它的一个处理的时候,我们要记住 cookie 都是来源于我们的豆腐,它跟我们实际上的动态的阿扎斯或者 jumper 的 相关的接口是没关系的啊。所以我们一般如果有遇到 cookie 加密,我们可以去尝试搜索一下 dom 的 点 cookie, 这样我们可以在这个页面进行搜索 dom 的 点 cookie, 对 吧?可以搜索 dom 的 点 cookie 之外,我们还可以搜索这种类似于这种打,当然这种是没有混淆的情况下啊, 后面的 cookie 那 它有很多形式,那我们这个叫做关键词搜索,就如果我们有遇到它加密啊,我们可以用这种方式去进行搜索, 但是我们要注意,像很多时候我们所遇到的一些 cookie 加密的网站,基本都是进行了一些隐私混响,所以啊,我们要注意啊,我们将使用到 cookie 的 定位,我们将使用的是 hook, 通过 hook 的 监听,通过 hook 来监听我们 dom 当中的我们的 seat cookie 或我们的 get cookie 操作。嗯,我们注意一下啊,我们将通过 hook 的 方式来进行监听, 为什么要通过后壳监听呢?因为我们很多时候会遇到一些混响,明白吗?那么在这里我们来试一下。首先我在浏览器里面我是有个插件啊,你看我有个插件,这个插件我们是可以直接用的啊,你看有个扩展程序,在扩展程序里面有一个叫做全量后壳拖环键的一个插件,我们可以把这个插件给它开启打开,然后开启之后回到当前的界面,进行界面的一个整体的一个刷新, 整体的一个刷新,然后这个插件它有什么功能的呢?大家来看,这个插件是可以直接来执行一键后壳的,就是不需要我们自己去编辑一些代码,那非常 nice, 这里面我们可以开启,你看这里有个后壳,我们的 cookie 来把它开启, 然后开启完成之后,我们可以尝试进行页面刷新,看一下它有没有生效,那我们试一下,你看是不是生效的,那么生效的,那么在当前的控制台里面,它会给我们来返回我们对那些 cookie, 你 看我刷新页面, 你看我刷新界面,当我刷新界面的时候,你看它这里是不是告诉我们,你看获取了 cookie, 然后 cookie 为什么?内容看到没有?对不对?你看是不是会给我们打印,会给我们输出,但是给大家讲一下,现在当前这个是谁啊?这个地方是谁啊?这个地方是不是我们自己的脚本, 是吧?所输出的内容并不是网页的信息,所以我们在这里我们还要通过它的一个调色来更加精准的去找到,看一下这个 cookie 是 在网页当中由谁来进行复制的,明白吗?那么在这里我们怎么办?你看这有个后缀编辑文件,这个是我们当前的脚本文件,可以打一个断点。 为什么要打断点打在这里?因为当前这个地方是我们自己的浏览器插件来监听到我们的 cookie 的 一个位置,来监听到我们的 cookie 的 位置,所以我们打一个断点,然后我们像在页面当中,你看我们来执行我们的分页,或者下滑进行分页,或者直接刷新整个页面都是 ok 的 啊。你看 cookie 失效来进行刷新, 然后当它刷新之后,首先会触发一个 bug, 像这种 bug 比较简单。啊啊?这种 bug, 大家看一下这种 bug 它其实很简单,就是一个代码,就是一个 bug 的 一个过程,对不对?我们直接可以鼠标右键一律不再次停止就可以了,你看 就可以把它放掉了,你看, ok, 那 么当它放掉之后,当前啊它会断点,断在我们刚刚监听我们 cookie 的 位置是不是断在这里, 那么我们现在我们要去找看它在网页端当中是如何来进行复制的,那么在这里我们去找到它下面的叫做调用堆栈的一个部分,我们去找到它网页当中的代码,上面这两个代码是属于我们自己的浏览器的,我们的插件的一个代码属于插件代码,所以我们需要来回到网页端中的代码体系,你看点过去,然后发现 一个高度混淆的代码,对不对?看起来很头痛,但是我们前面可以看一下这个地方,你看它是不是就是多空的点? com 可以 看到没有, 看到没有,它是不是就是一个多门的括号?我们的一个 cookie 是 不是我刚刚跟大家讲的,其实我们在很多时候如果网页它没有进行 js 混淆的话,其实我们在这个地方直接通过多门的括号 cookie 的 方式,我们是可以直接搜索到它的,但是它进行了混淆,所以我们找不到,那遇到混淆怎么办 啊?遇到混淆我们就拍拍屁股走人了啊,对吧?呃,跟大家讲一下,遇到混淆不要慌,混淆。说实话现在在 js 印象体系里面啊,混淆真的是最简单的东西了,因为目前市场有很多开源的一些在线混淆的一些处理, 首先在这里不要直接复制,为什么?因为当前这个页面它是属于一个 html 一个页面,所以啊,我们需要把当中的代码给它单独掏出来, 呃,用 ai 能还原吗?用 ai 也可以,用 ai 也可以,只是说 ai 呀,会较为比较慢,哈哈,因为毕竟它不是一个专门还原的。你看,我们可以使用 google, 你 看,我使用 google 四点一,我让他来帮我把,帮我把以下代码进行反混淆还原处理, 你看,我们可以试一下啊,当然也是 ok 的。 只是说它会比较慢啊,它会比较慢,它没有那么的快。你看,你看, 那么在这里它会进行还原,只是说它的还原的逻辑会,你看它会比较慢,看到没有?像这种还原的话,我的建议是咱们朋友们可以直接使用一些在线还原的网站,如果你没有的话,你可以关注我,然后来直接获取。好吧,这个网站反正都简单,你看它很慢,看到没有?它很慢 很慢,所以我就不用它了。好吧,我们可以直接怎么办?我可以推荐各位一个在线的一个 g s 的, 一个 s t 的 一个反混响的一个技术来直接把它粘贴过去,然后你看直接还原。那么大家有没有发现我们还原之后的代码非常的简陋,对吧?你看,我们可以对比一下,你看我们新建一个 g s, 这是一个还原好的 g s 啊, 你看,我们在网页端当中,我们发现它的代码好多啊,是吧?好复杂呀,对吧?好多好复杂。你看,看起来有点吓人,但是实际上当我们通过在线还原还原之后,我们发现它只有将近才十几行代码, 对不对?而且我们很清晰的可以看到,在这个里面,你看我们的 document 点 cookie 是 不是等于 m, 然后,呃,一个 tostring 的 一个处理加 i e s, 那 么我们是不是可以去分别看一下?你看 m 是 不是就是我们要的 cookie 的 加密的值,我们是不是要它?是不是?我们是不是要它?所以我们在这里,在浏览器里面分别看一下前面这部分是干嘛的? 呃,一个五好像没什么用,这个五,我们在这里好像我们不需要五吧?这里有个数字,是吧?有个数字有个四,对吧?应该是需要的啊?这个数字我们是应该要的 m 减一点图形,然后屁股后面还有个 rs, 对 吧?还有个 rs, 来我们看一下,这个 rs 就是 我们要的值,对不对?是我们要的值, 那么我们当前的这个代码的逻辑,他应该,其实说实话他是这样的啊,就是我们处理之后,你看我们来做一个 gs 的 一个处理,来生成一个 gs code 的 gs 文件, 你看作为主文件,那么你看这个地方它是不是就接收了我们的光盘头的 m 的 一个值,对吧? cookie 杠 m, 这个是不是就是我们的 cookie 的 值?是不是就我们的 cookie 值? 然后我们的 cookie 值在这上面它是做了一个循环,大家请看啊。首先它做了一个 for 的 一个便利,对不对?是做了一个 for 的 一个便利,那么它这个 for 的 一个便利的话,里面也会来生成一个 delete, 我 们看一下便利条件, m 等于一的,当 m 小 于等于四,然后 m 执行便利的条件, 是不是啊?它这里是不是会有一个 m 的 一个便利的一个条件?所以我们现在可以把它拿上去,对吧?可以把它拿上去,是不是这样的一个结构?是不是这样的一个结构,但是我们当前是不是缺少了一个 de trap 的 一个方法?这个 de trap 的 方法是不是就是我们当前的核心的 cookie 的 加密位置,对吧?这个地方是不是我们的核心? ok, 加密的方法是不是这么一个逻辑?各位,你看是不是很简单?那么像在这里我们当前去运行它,你看它会直接报错,因为报了 dept trap 每个定义对不对?哦? ok, 那 么在这里我们现在去观察一下,看一下 dept trap 是 如何构成的,我们在浏览器里面去看一下它, 我们找一下,看一下在哪里啊?呃,可以看到 dept trap 是 不是就在它上面,对不对?我们可以在控制台里面来输出我们的 dept, 然后 dept 也是一个高度混淆的加载码, 大家看一下,也是一个高度混淆的接收代码,那么我给大家讲一下啊,这个接收代码的混淆有点特殊,它这个技术叫做 g s 加密点抗点 v 五看没有?这是一个在线的,专门的做咱们的一个接收加密的一个网站,这种是还原不了的,我给大家讲一下,你看我们可以尝试一下,你看我们还原是还原不了的, 是吧?因因,因为他里面缺少了一个 email 的 一个执行逻辑,就是我们如果直接去用的话,你看他会报错,告诉我们 email 扣的无法运行,看到没有?请在后台查看错误信息,他是不能够被成功还原,是吧?那么我们一般遇到这种不能够被还原的代码,我们大部分情况是使用手抠代码, 对吧?手抠就是我们自己去一个一个的根据他当前所缺失内容来进行补充来补全他,当然了,我们还可以通过手动方式来进行手动还原,也是 ok 的, 通过手动还原,那么在这里其实我们可以去重点观察一下当前的这个代码他最终的返回,你看这个是不是他最终的返回啊?各位,呃,这是猿人学的一个第九题啊,猿人学的第九题,那么大家请看,我们在这里首先我们可以去观察一下他这个二四七七二好像是变化的,他这个症状是变化的, 你们要注意啊,朋友们,它里面这个自创是变化的,看,没有,它这个自创是变的啊,不是说是,呃,动态的啊,你看,啊,不,不是固定的啊,它是一个变化的一个参数,你看我们可以往上推一下,呃,也就是说它在这里进行循环的时候,其实际上你看它这个地方,你看这个这个地方是变化的, 也就是当前这个数值啊,它是由我们请求 html 页面来进行返回的啊,当然了,它有可能就是一个当前时间戳,对不对啊?也有这个,哦哦,问题啊,这个我们大家注意一下,但是你们要注意,也有可能它是服务器选项, 所以不要搞错了,明白吗?好,那么像在这里我们来看一下啊,首先这个整体的代码我们可以把它掏下来,这是是是不是对应的就是我们的 d trap 的 一个方法,这个地方对应的是不是我们的 d trap 的 方法,那么在这个方法里面它里面有进行了很多的混淆,对不对?是不是有进行的很多的混淆,那么像这些混淆我们可以尝试来手动把它还原,你看我们可以手动把它还原。 首先在这个地方他会进行一个取值。各位,你看这个是有一个对象叫做五六一 a, 在 这个五六一 a 对 象当中啊,看一下啊,这个地方他是我们执行一下,看下是个什么东西,你看我们手动去把它还原。呃,这是手动还原的内容,看到没有?手动还原,他来手动还原, 对吧?这个地方可以呃,不还原也没事,对吧?不还原也没事,但是的话我们现在是不是缺少了一个五六 a 一, 这个五六 a 一 当中它会给我们返回很多的一个,你看我们看一下,这会返回一大串的一个呃,数字,呃,自创啊,这个地方是干嘛的?我们也不清楚,对不对? ok, 那 么我们看一下下面,下面这个地方,我们像这种数组的这个地方是可以还原的啊,这种数组的地方我们可以把它还原 呀,我们可以还原它,那可以把它还原。然后其次像下面地方也有一个宿主的,对不对?这里是不是也有一个宿主,我们可以把它还原。其实在这个地方啊,我们大概的观察一下,我发现它有点类似于我们的 rsa 的 加密算法 啊,有点类似于 rsa, 首先它是进行了,你看为什么我说它有点类似于 rsa 呢?你看第一个它进行了一个 j s intrap 的 实变化,然后进行公钥的填充,公钥填充完成之后再来进行 intrap 的 加密,然后进行 u l 的 一个编码, 看到没有其他逻辑,看起来好像挺简单的,对不对?呃,但是在这里大家请注意,我们会发现在这里面他有做了,呃,一个值,这个值好像做了一个取值啊,朋友们,这里是不是做了一个取值? 是做了一个取值,我们要去注意的地方就是他的公要是否为变化的,是吧?有可能因为这个地方我们可以看到他的公要的话是不是在这个地方啊?极限四啊?极限四,目前一千四,一千六的样子吧,不会特别高,极限四还好, ok, 那 么在这里我们现在我们要知道这个五六 a 一 是怎么构成的, 但是这个代码好像有点复杂,所以我们不太好弄,对不对?那有没有什么好方法呢?呃,给大家讲一下。首先我们现在我们可以看一下,你看我们可以去把这个五六 a 一 把它全扣下来,你看可以把它全扣,你看点过去,你看这是不是一个整体的五六 a 一 的一个声明, 是不是一个五六 a 一 啊?可以把它折叠起来,你看把折叠,我们看一下整体的五六 a 一 的整个主体部分,你看是一个整体部分,这是一个整体部分五六 a 一 看到没有? 是我的五六 a e, 那 么在这里我们可以尝试,你看我们来尝试扣代码,但如果我们做这种尝试扣代码的话,它里面会涉及到很多的一些混响词汇,需要去进行处理。你看首先我们在这里去进行五六 a e 的 一个调用,我们就通过上面这个柱状来进行调用,我们先把上面的五六 a e 把它跑通,好吧,下面的代码先进行注视, 我们先把这个五六 a 一 给它跑通,我看一下五六 a 一, 当我们去执行的时候,它这里报错了,报一个下划线,下划线九 a 四 e b 的 一个错误,对不对?那么这个地方它就考验咱们同学们扣代码的能力了,我们需要去找到这些对应的代码,然后把它扣下来, 那你看是不是在这个地方,是吧?你看它的话是为一个正创,呃,一个数组,这个数组里面还别说东西多,那么我们像在这里我们也可以手动右键复制整体的 object, 把它扣下来。 你看这个列表三千多行,看到没有?把一个三千多行的数字的还原,我们去把它执行,然后执行,我们发现我们的程序会有点稍微的卡死的一个状态,然后这里还给我们抛出了这么一个异常,对不对?呃,我给大家讲一下,他这个地方有可能是反格式化检测, 那叫做反格式化检测,如果说他有涉及到这种反格式化检测,我们把当前代码去进行压缩。呃,怎么个压缩法呢?就是说我们在我们浏览器里面找一个在线的在线 gs 压缩 呀,找个在线 js 压缩,把当前的 js 代码来进行压缩,压缩,把它 ctrl c 过来,把它全部替换掉,把它全部压缩。其实我们也可以搞存算啊,这个地方说实话,因为它这个地方里面的公要其实很多时候是不变的。来,我们去执行代码,然后执行代码之后,我们看一下,它里面会给我们抛出一个异常,说一个 v a r 的 一个错误,哦哦,我们压缩错了, 来,我们正常的压缩结构应该是这样去处理啊。首先我们来看一下啊,这个代码是这个部分啊,我们看一下这个九六一,九六一好像在上面,我们看一下啊,是在这里看到没有? 那我们把它折叠起来,这个地方可以全抠。呃,我看了一下这个地方还可以全抠啊,算了,我们不做全抠法,好吧?不做全抠法,对吧?这个地方可以全抠,因为我看一下结构,就是如果它是以这种结构来进行处理,我们可以考虑的是把它进行全抠。呃,也是没有问题的,你看它里面还会有工装 来,我们就是把这个部分给它拿下来,你看啊,把这个部分给它拿下来,把它删掉,好把它拿下来。稍等一下啊,这个 vr 可以 不要啊,因为我们刚多了一个 vr, 然后的话我们再把这个纸给它拿下来。这个地方它好像没有做处理,所以我们不用那样麻烦,我们直接把它拿下来就可以了,直接把它拿下来 没问题啊,来不要换行。好,然后把这个代码我们可以去运行一遍啊,它会报我们刚刚的那个错误,看一下会不会报错,你看是会报刚刚那个错误。好,然后报错之后再把这行代码来 ctrl c 做 d s 的 压缩来把它进行压缩,那就没有问题了啊,进行压缩来压缩之后把它进行替换, 把替换替换之后来进行代码,你看是没有问题,朋友们,是没有问题,但是各位有没有发现一个很尴尬的问题,就是我上面这个代码是没问题的,但是我这个地方他并不能够给我们来输出我们的值, 有没发现他是没有输出我们的值的是没有输出我们的值,那么当前这个五六 a 一, 其实说实话他可能在这个页面当中,因为正常我们现在走到我们当前这个位置的话,我们的五六 a 一 啊,这个地方他应该正常来讲是给我们输出了这么一个公告,对不对? 你看是不是 ic 的 一个公钥,对不对?是会给我们输出一个公钥,但是我们实际上我们可以看到当前的公钥的一个输出在本地是没有的,对吧?我们可以来观察一下当前这个对象,我们首先去看一下它在这里面是做了什么样的一个类的,反正这个地方我们是不用管它喽,对吧?我们看一下啊,五六 a 一, 五六 a 一 的话,其实实际上它是做了很多处理,这里面还有个 beta, 是 吧?还有个 beta, 这个 beta 就是 我们刚刚那个还原的那个数值啊,嗯,然后下面有三行,然后有个 r c 四, 对吧?有个 r c 四,呃,我们向往下翻一下,我们看一下它有没有可能是当中的这个 r a, r c 四的调用来生成的,我们的刚刚的那个参数,对吧?我们来试一下,好不好?我们来试一下,来,我们在控制台当中去进调用来点 r c 四, r c 四是 r c 四吧,然后加个空号,然后我们发现 r c 四的调用是调用失败的 啊,不能这样掉,那如果说他不行,那我们就只能考虑全扣,对吧?全扣明白吗?当然了,我给大家讲一下其实公要的话这种逻辑,其实说实话公要我们一般正常来讲,这种公要我们其实是可以直接固定的,也没关系啊,是可以直接固定的,我们是可以把这个地方给它直接固定,就是公要, 它其实就是一个公要,也可以直接固定,明白吗?所以但如果有说是变化的,那你可以再继续用我们刚那种方式,好吧,我们可以先把程序跑通, 那么像在这里我们再来试一下这个 g s in trap, 这个 g s in trap 它会有个版本的问题,它当前版本产的是三点零点零杠 r c 点一的版本,但是我们在本地,在本地的话,你看它这个地方其实是用的低版本的啊,你看我们使用一个 g s in trap 等于为块来导入 g s in trap 的, 那么像我们这个 g s in trap, 它的版本会有点不一样,各位,我们看一下。 你好,我们当前的版本会跟他的版本会不太一样,我当前的版本是三点五点四的,看到没有?所以大家要注意它的版本问题。当然我们使用这种低版本的逻辑的话,你看我们的加密啊,其实它就会,呃,加密不了,哎,稍等一下,这个地方 你看我们试一下啊,我们看一下这个加密能不能加密成功,它有可能加密成功的,当然有可能它加密成功的值是不可用的,朋友们,所以你们要注意。 呃,加密是能够加密成功,但是它里面的值可能是不可用的。而且各位有没有发现,我当前的所有的返回前面都是以五开头, 也就是说当前它这个地方应该还有处理,应该还有处理这个代码,它应该是一个动态代码,对吧?刚刚讲过这个代码它是要来请求,我看了一下啊,它是需要来请求它的 html 页面,然后来进行返回的, 是吧?还要去请求它的 html 页面来进行返回的,也就当前这个页面,然后去通过正则的方式就把它匹配出来啊,还有里面这个数值,它也是动态的,你看它这里面这双代码其实是动态的,大家有没有发现,你看这个 m 小 于等于三,看到没有它会变,你看我们这里它是变成了五, 所以大家要注意啊,大家要注意,对吧?那么它当前这个 qq 加密其核心的点其实说实话还是比较简单的啊,它这个题目就是第九题,第九题的重点考验应该就是考验咱们同学们第一个 反混响的处理,对,反混响的一个处理,然后其次除了反混响处理之外,还有一个就是需要有具备一定的分析能力, 因为你如果没有这个分析能力的话,你就很难看出来它里面的一些内容其实是要去请求妙页面,然后来提取的,是不是这个题目说实话还是比较简单的啊?朋友们,对吧?但是,呃,很考验基本功。

浏览器里的 cookie 到底是什么?简单讲, cookie 就是 网站存里电脑或手机里的小文件,主要用来记录信息,方便下次访问使用。 cookie 有 啥用呢?最常见的就是记住登录状态,比如你登录了淘宝,下次再打开就不用重新输密, 还有个性化推荐。你在京东搜过手机,下次再打开首页,可能就给你推手机相关的商品。另外,像调整网页字体大小、主题颜色这些设置, cookie 也能帮你记住。购物车功能也离不开它,你加到购物车里的东西,就算关了页面再打开,一般还在里面。 cookie 分 两种,一种是临时 cookie, 浏览器一关就没了。另一种是长期 cookie, 设置了过期时间,到期才删,像记住密码这种功能用的就是它。不过 cookie 也有问题,主要是安全和隐私。网站数据库要是被攻击, 库里的信息可能泄露。还有广告商会通过 cookie 分 析你的兴趣,推送广告,这可能会泄露你的隐私。那怎么管理 cookie 呢?你可以在浏览器设置里查看和删除 cookie, 定期清理一下,能释放存储空间,但也会退出已登录的网站清空购物车要是不想被跟踪,可以禁用 cookie, 但有些网站可能就没法正常用了。

今天咱们来聊一个测试工具,叉子抓包工具。不管你是做前端、后端还是测试,只要涉及到网络请求,叉子绝对是个能帮你省大事的家伙。它就是个 h t t p 代理监控的工具,能把你设备和互联网之间的 h t t p h t p s 通信数据你都拦下来,记下来, 不管是请求响应还是 cookie, 这些头部信息都能看得明明白白,电脑、手机的请求它都能抓,实用性贼强。我把它分为几个核心内容,搞清楚就行。首先是工具安装,这是基础哈,得先把叉子装明白,还有它的主界面,各个功能区是干啥的, 得先熟悉熟悉。另外还有配置 ssl 代理,这可是抓 http 协议的关键步骤,可不能落下。然后是基本应用,比如怎么用它抓外部项目的包,还有现在咱们常用的 app 项目 怎么抓手机上的请求,这都是咱们日常工作里经常用的上的操作。最后是常用场景像,怎么判断前后端的问题,接口出问题了,到底是前端传蹭错了,还是后端返回不对,怎么进行 mark? 开发还没写完接口的时候,咱们自己造数据就能测前端。还有怎么进行弱网测试, 模拟网络不好的情况,看看项目会不会出问题。针对这几个核心内容,这这份文档包含了从入门到精通的全部干货,把这些内容都串起来了,就能熟练的用它干活了。

欢迎观看本期编程知识讲解视频,今天我们将深入探讨 nginx 是 什么,让我们开始吧! gixis 是 一款高性能的开源 web 服务器和反向代理服务器,同时也可作为邮件代理服务器。 它就像餐厅的前台接待员,不仅能直接为客人提供简单服务,如递菜单、倒水,还能引导客人到合适的座位转发请求到后端服务,或协调多个服务员处理高峰期的客流负债均衡。 incence 诞生于二零零四年,以清量、高效、稳定著称,如今广泛应用于各类高流量网站,是现代 web 架构中。如今广泛应用于各类高流量网站,是现代 web 架构中空不可缺的一环。反向代理是 ngx 的 核心功能之一。想象你打电话给公司前台,想找技术部同事,但 你不知道他的分机号,前台帮你转接过去,你无需关心同事的具体位置。 ngx 作为反向代理时,客户端请求先到达 ngx, 再由他转发到后端的应用服务器,如 tomcat、 node js。 后端处理完后将结果返回给 n g x, 最后 n g x 再把结果发给客户端。这样既隐藏了后端服务器的真实地址,也能统一处理请求的加密、缓存等,提升系统安全性和效率。 赋值均衡是 ngx 解决高病发问题的关键手段。就像餐厅高峰期领班把客人均匀分配给各个服务员,避免某个服务员忙得不可开交,而另一些却无所事事。 ngx 通过赋值均衡策略,如轮询、权重分配、 ip 哈希将大量客户端请求分散到多个后端服务器,比如轮询就是按顺序依次转发请求, 权重分配则根据服务器性能高低分配不同比例的请求。 ip 哈希能让同一客户端总是访问同一服务器,保证会话一致性,这大大提升了系统的推量和稳定性。 mason 擅长快速处理静态资源,如图片、 css、 js、 html 文件类比便利店卖瓶装水,客人进店拿了就走,无需复杂操作。而现做咖啡则需交给后厨。 mingxin 处理静态资源时,直接从词盘读取文件并返回给客户端,无需经过复杂的计算或数据库查询,效率极高。因此多数网站会将静态资源交给 ngins 托管,动态请求则转发给后端应用服务器,这样分工协助,让整个系统运行更高效。 kingston 高性能源于其事件驱动非阻塞 i o 的 工作模型,想象一个服务员同时照看十桌客人,当一桌客人在看菜单时,服务员不会站着等待,而是去处理另一桌的点单,等这桌客人决定好后,服务员再回来记录。这种方式让一个服务员能高效服务多桌客人。 kingston 正是如此,用少量进程就能处理数万并发连接,因为他不会为每个请求阻塞等待,而是通过事件通知机制,在请求准备好后再处理,极大节省了系统资源。 gens 的 配置文件是文本格式,结构清晰且层次分明,类比酒店的官僚制度大局快是酒店的整体规则,如每个员工同时服务多少桌。 event 的 快是员工接待客人的规则,如每个员工同时服务多少桌。 htp 快 是客房服务的总规则。 server 快 对应某个楼层的具体规则。 location 快 则是某个房间的细节要求,如是否允许吸烟, 理解这些层次结构,才能正确配置 instance 的 反向代理、载均衡等功能。比如在 server 块中定义域名儿,在 location 块中指定静态资源路径。 kingstone 和 apache 是 web 服务器领域的两大主流。 apache 向全能型处事,擅长处理复杂的动态请求,但在高病发下会占用大量内存,每个请求对应一个进程或进程。 engens 则向高效的快餐厨师用事件驱动模型处理请求,资源占用少,并发能力强。比如小餐馆低流量网站用 apache 足够,而大型连锁快餐店高流量网站更适合 anngix。 此外, anngix 的 反向代理和赋载均衡功能更强大,常作为 apache 的 前端,分担静态资源和并发请求的压力。 jason 可以 通过配置提升网站安全性,比如开启 https 加密传输,向餐厅安装监控,防止信息泄露。用 s n c l 证书保护客户端与服务器之间的数据,限制请求频率,如每分钟最多一百次请求,防止恶意攻击导致服务器过载, 隐藏 nginx 版本信息,不对外透露餐厅内部规则,减少被攻击的风险。还可以通过配置防火墙规则过滤恶意请求,如 secret 注入 xss 攻击。这些配置能有效保护后端服务,让网站运行更安全。以上就是今天关于 nginx 是 什么的全部内容。

写 js 的 时候大部分人应该都用过 eva 啊,代码解析器和 new 方选,这个要小心啊,这两玩意都是有安全问题的。 先说一说动态执行代码是什么吧,就是让 js 运行的时候去解析字幕创代码,比如代码解析器里面传入字幕创 alert, 一 看着方便,但是隐患却能让你哭晕在工位上。那第一个 就是叉 s s 的 攻击重灾区,如果就是你的动态代码里面参了用户输入,比如把用户评论直接塞到代码解析器里面,那黑客就能注入恶意代码,偷用户的 gucci 篡改页面内容。 然后第二个坑就是性能难画,很难调试。动态代码是运行时变异的,然后比普通代码要慢一大截。而且你第八个的时候呢,你根本就看不到字幕串里的代码,逻辑报错了都不知道哪出了问题。 第三个就是座右铭了,代码解析器会污染当前座右铭,一不小心就会篡改你的变量。虽然说你有 function 要好一点,独座右铭是独立的,但是也架不住你传餐的时候把敏感数据带进去的问题。 那就不用动态执行吗?其实也不是的,就是说, 但是也说真的能不用就不用。如果你想动态调用函数的话,就别写代码姐姐去去调用他,用一个对象的形式把你要动态调用的函数都写上,用一个字面量嘛,这样的话 虽然代码量上去了,但是一个字稳得很啊。第二个就是你必须要用的话,就要严格过滤, 如果实在是要处理用户输入,那就把输入的内容白名单过滤,或者是只允许输入指定的制服和格式,然后其他的全部 pass 掉 啊。第三个是用更安全的替代方案,就你比如说在接圣点 pos 去解析的 pos 去替代代码解析器解析接圣,或者用 webworker 去隔离动态代码,避免污染主县城和作用域嘛。 啊,最后呢,就是要记住动态执行代码一定要踩住安全的底线。好了,按时下班吧。

库可以是我们前段编程中经常使用到的一个概念,我们可以使用库,可以利用浏览器来帮助我们存放用户的相关的状态信息,保存用户已经做了些什么样的事情。 那么 q k 的工作原理到底是什么? q k 的限制又是什么?而筛性是我们在服务器端所维护的绘画状态,那么筛性又怎样与酷 k 关联起来呢?这节课我们将介绍 q k 与筛性的相关的使用。 好,我们先来看看 coke 是什么? coke 是在 fc 六二六五规范中有定义,那么它其实是一个 spp 的状态管理机制, 那么我们就他的使用的流程上来讲啊,是这样的,那么库可以是保存在客户端的,他是由浏览器维护的,但是他的生存是 是由服务器来生成的,那么它的目的是来表示我们应用的状态,就是用户已经做了些什么样的事情。那么库克也是一个 suv 的头部啊,它可以存放在内存或者磁盘中。 那么服务器端生成了 cook 以后呢,是通过响应来反馈的,比如在右图中,那么 client 第一次访问是没有 cook 的,那么 serve 呢,就会在一个响应头部叫 set cook 中去传递一个 k value 给 我们的客户端,而我们客户端呢,就收到了这样的 ky 了,以后他会保存在浏览器中。当然我们可以传递多个赛的库 k 之段,每个赛的库 k 后面会有一个 k y, 而客户端得到了这个 q k 以后呢,后续的请求,我们无论只要在访问这个域名下的所有的请求,都会自动的把我们收到的 q k 中的 k y 六携带进来,以 q k 这个 high 的头部把它传递发送给死亡,那么这就是库 k, 那么我们具体来看一看库 k 与赛的库 k 这两个头部的定义是怎样的。比如我们先来看下面的这个服务器端向客户端发送的赛的库 k, 他一次只能传递一个内幕外流这样的一个名职,对,就是一个 ky 六,那么一个响应中可以含多个头部,但是一个塞的库 k 在 a d n f 中呢?到底是怎样定义的呢?我们来看一下。首先是塞的库 k 冒号加一个 s p 空格, 那么后面是我们的塞得库克斯俊,这是一所有的 igb 头部都是一样的,那么重点在于塞得库克斯俊啊。 我们来看一下塞的酷威奇骏,它包含第一部分叫 cookie pear, cookie pear 是什么呢?就是后面我们写的 cookie name 加 cookie value 就是一个民族队,那民族队后面呢?它会有一个叫 cookie iv, 就是 h built, 就是我们的属性,属性呢,可以有零个或者多个,那多个属性之间呢?以分号进行分隔, 他是用来描述我们前面的 cookie pair 的,我们在后面再详细来讲 cookie pair 的这些属性。我们先来看一下,如果 cookie 拿到了这样的一个 cookie pair, 那么浏览器中已经保存下了 cookie pair 了,那么在发起请求的时候呢,就 可以通过 cookie 来发送出去了。但是 cookie 与塞的库可以不一样,塞的库可以,我们可能有很多塞的库可以头部,但是库可以只需要有一个头部就可以了,因为这个库可以头部中我可以存放多个 name value 的这样的一个 cookie pill, 为什么呢?因为我们的 cookie head 中,在 abm 中的 d e 非常明确的说了, cookie 后面是一个 ow s, 一个可选的一个空格,后面加上 cookie stream, 哎, cookie stream 到底是怎样的呢?就是 cookie pie, 至少一个库克佩尔,以及后面有零过多个库克佩尔,就是我们可以有多个库克佩尔,多个扑克佩尔之间是以分号进行分隔的,那每个库克佩尔也是以内部外六的形式,那么下面我们来看一个简单的例子。 好,接下来我们做个演示,这个演示是以我的个人网站,它是一个 water press 搭建的个人站点,我们登 目他开始,那么登录他的时候呢?首先我按 ctrl 秀的 i 把我们 nitwook 面板打开, notwook 面板打开以后,我们注意要把 preserve log 这个选项勾选住,这样的话呢,因为我们登录成功以后会返回一个三零二重定音响,以防止这个包我们看不到,所以我们加入 preserved log, 那么这个时候我去输入我的登录密码, 输入完登录密码以后呢,我们点击登录,那么这个时候我们看到了后面的请求,首先我们来看第一个登录请求,那么第一个登录请求返回的是三零二,那么这个时候呢,我们可以注意看到他的 response hat 中有很多塞的 cookie, 那么这些每一个塞的库 k 头部呢?对应的是一个库 k 片,就是一个 k y 的名字,对,比如说这个名 名字叫 the water plus test cookie, 那么我们还有很多的这样赛的 cookie, 这个赛的 cookie 呢?我们在瑞士胖死呃,人家的 work 在瑞士胖子里面也可以看到, 那我们可以看到这里返回的库 k, 那么一共有这么六个库 k, 那么我们后面的请求呢,都会携带这些库 k, 比如我们 w c l 的命,这个 u i l 访问的时候,我们可以看到他的这个 request 的 最快死了。我们的请求中的库克中呢,带入了很多个民族队,其中我们新增的沃尔普莱斯,泰式的库克,以及后面我们加入的这几个库克都已经添加到请求中了。 好,我们回到 ppt 中,我们再来看一看赛的 cookie 中只有一个 cook pill, 然后呢,可以有很多个描述我们 qq 片的 cookie, lv 就是我们的属性,那么这个可选属性有哪些呢?我们来看一看。那么 cookie lv 在 abn f 中的定义中有主要有以下六种,我们先看第一种 expire, expire 呢,就是告诉这个 cookie 可以使用多久, 那我们会明确的指指定一个日期,超过这个日期时间点以后,这个枯魁就应该要作废,这个要求我们浏览器必须把这个枯魁 清除掉。那么第二个呢?这是 max age, 我是以一个定时器的方式告诉浏览器经过多少秒以后,那这里这个秒错不能是零,所以我们这里写的很清楚,是一个 nine zero digit, 是一个使劲字的方式啊。 那么如果 max a 级和 expire 呢?同时存在的情况下呢,我们将以 max a 级为主,因为它的优先级会更高。我们再来看第三个独魅 av, 独魅 av 呢,只是告诉我们这个酷给可以用于哪些域名,因为我可能有很多子域名 默认呢,是告诉我只能访问我的当前域名,但是我可以说这个库克也可以访问我其他的一些子域名或者其他的域名,也可以使用我们这个当前的库克。 那么 pass 呢?则是告诉哪些路径下才能使用这个 cookie, 因为后面我们可能会定义只有访问比如说 wpl 的命这个页面,或者访问某一些 css 或者加法式 cup 的时候, 你才能使用我这个 gucci, 那么我们只 pass 来定义我们后续的 uri 中的路径。那么 seiku av 呢?就是来定义我是否只能使用 t 二 s s 拍照,就是我们来 gps 的时候才能使用 pk, 如果我们加入了 seco 这个属性,那就是说要求必须使用 htbs 的时候 才能使用我们的 cookie。 如果我们加了一个 hp only 呢?他倒不是表示只能使用 suvp, 那跟这个是没有关系的,他表示的是不能使用加瓦斯库伯的,像 document cucky 或者 xmo h v 筷子,就是我们阿加克斯请求,或者我们的瑞克斯埃比亚访问我们的 cookie, 不能使用这些方式访问 cookie。 好,我们现在回到我们第一个请求 w 跟应我们登录的时候呢,返回了我们很多的赛乐库 k, 那么比如说我们看第一个赛乐库 k, 那么它它的 name 叫沃特 plus test 库 k, 那么这里它的属性 pass 就描述的很清楚,这里大家都可以用啊,我,我的 pass tese cook, 因为他 pass。 是啊,跟路径 好,那我们来看第二个枯萎,第二个枯萎中呢?呃,就用 pace 等于 wp 款探的普拉格 ins, 也就是说只有这个 ul 其实的才能去访问我们这个 ky 六,那么 hp only 就是说这个 cookie 呢?使用佳乐斯 kill 或者价格词是不能去读取到我们的这个 cookie 的,但到后面我们还有这两个 cookie 其实是完全一致的, 那么只是把路径做了些变换,那比如说这个塞的库 k, 我们这里定义了 xpaya 和麦克赛意见,那么他的过期时间。 好,然后我们再来看一下啊, cook 使用用什么限制呢?我们先来看一下 f c 规范中对浏览器使用 cook 的要求,因为在瑞士的架构中呢,我们有很多个不同场上的 浏览器,而且这些浏览器呢,会以很多种不同的版本同时出现。所以我们先看 rc 规范他的要求,他要求呢,每条 q k 的长度,浏览器至少要支持他达到四 k b 以上。 那么每条 cookie 是什么意思呢?就是我们的 cookie pierre nemo value 以及描述他的属性的总长度。 比如说他只能使用 igbs 访问,或者说啊,不能用加瓦斯 cable 直接读取到,或者他的这个过期时间等等。这是一条哭 k 的长度, 我们请求中的那个库可以嗨的中是可以含有多个库,可以的,这个不是他的限制范围。第二个是呢, fc 规范要求每个浏览器在每个域名下制裁 要支持五十个库克,那么 fc 规范呢,要求一个浏览器至少要支持三千个库克啊,这是 fc 冠对浏览器使用库克的一个要求。而我们实际上在代理服务器中传输库克的时候呢,也会有限制,因为库克是放在我们家 hb 头部的, 我们的很多代理服务器可能会限制 igb 的头部的长度为四 k 八 k, 那么像 mx 默认是三十二 k, 所以呢,生成 q k 的 orange seven 就是我们的原服务器,应当尽量减少每个 q k 的大小, 所以库可以在协议设计上的问题呢,也是一样的,因为库可以会被附加在后续的每一个 icb 请求中,所以呢,无形中是增加了我们的传输流量的,我们的网络效率是在下降的。第二呢,是由于我们的库可以在 h 请求 是名人传递的,所以他安全性是有问题的。当然,如果我们使用 t 二 s, s, s l 以后呢,那么这些所有的应用层消息都是加密过的,就没有这个问题了。第三个呢,是我们的库汇的大小不硬超过四 k b, 因为我们的 fc 规范中呢,只是对各个浏览器要求他们要能支持四 kb, 但是如果大于四 kb 以后呢,可能有些浏览器处理就要出现问题,或者我们的库可以在代理服务器的传输中可能会出现问题, 所以如果我们使用库可以来存储非常复杂的结构化的数据,就有可能来说不够用了。