小迪安全课程笔记-2024-七-
小迪安全课程笔记 2024(七)
P25:第25天-PHP应用&文件管理&包含&写入&删除&下载&上传&遍历&安全 - 逆风微笑的代码狗 - BV1Mx4y1q7Ny
今天呢讲这个pp。

关于这个文件管理模块的那三节课呢,我们讲了这个上传和这个便利的事情啊,包括这个什么包含哪什么写入啊,删除啊,下载啊是吧,这些的一些安全问题呢,包括它的一些功能编写呢。
就是我们今天要讲的这个呢是我们一张截图,这个截图呢就是我提前给他做好的,大家可以看一下啊,这个就是我们那个写好的,就可以实现这个当前目录的一个便利,然后呢你可以打开里面看也是正常的是吧。
那每个里面的文件呀,里面文件夹里面的文件啊都是正常显示,是外面,然后呢包括它的这个编辑呢,还有这个下载的删除呢都能实现啊,这是我们的一个东西啊,目录呢我们就尝试打开啊,文件都进行这个编辑下载。
删除一些功能,包括这里还有商权啊,这个商权呢是单独写的,是桑杰克写的啊,呃这是最方便,在讲这个之前呢,我们给大家看一下,除了这个商船呢,我们上节课讲的是什么呀,我们上节课讲的是上传到这个本地的。
那么这里呢还有一个页面是商传什么OSS的,你就说这个东西呢是上去OS还是啥意思呢,就我们前期给他说过,就说有些文件呢它是存储到这个网上的,这种什么,网上那种OS资源前期给大家介绍过吧哈。
然后呢你就可以说一种呢,就是用你自己的服务器的这个存储空间呢,去存储这个商传后的文件,还有一种啊,就是说利用这个什么网上这种OS的这个,存储模块应用来存储这个,来存储啊,我们再来给大家看一下这个OS啊。
你开通之后呢,它这里就会给一个这个地址啊,你就可以用这个东西呢来存储各种文件,那么这里存储的话,就说它仅仅是存储了这个文件上传上去,那就不会有任何的一个用处了对吧,这是我们前期呢给大家讲过。
这个OS一个和常规这种文件存储的一个特性啊,对不对,那么文件上传呢,可以上传到这个什么这个上面来,那也可以呢上传到这个服务器本身啊。

对不对,那就是说这个商船呢,它是可以选择性的商圈刀服务器的本身,然后呢还有一种情况就是我们这里说的啊,可以通过这个OS它去存储,这是当时写的这个文件上传的这个脚本啊,我们把现找的啊,你这个pp写了啊。
哎这里来看一下啊。

是吧,这个就是我们把它存储到这个本地的,存储到这个移动到本地的upload,这是当时我们讲的,那么现在呢这个呢这个上传呢。

它是把它存储到这个OSS里面。

然后他是用的什么东西来存储,那我先给大家看一下这个源码啊。

那这是他的商城页面,它不是用pp开发的,它是用JS开发的,也是可以用pp开发啊,这是用JS开发的,他用这个upload js呢,就我们马上就说pp讲完之后呢,要讲这个JS。

那么我们到时候就会讲这个东西啊,用JS呢我们只是说提到上传的时候,那你看这两个还有这个配置什么,阿里阿里阿克萨斯K是吧,还有你这个存储的地址啊,对把它写上去,那就是说我们可以呢在我们的OS资源这里啊。

自己呢点一下这个他那个授权的那个东西啊,包括这里有个地址嘛哈就这里最大存储,这里不是有个,这个地方嘛是吧,然后这里是他的一个路径啊。

我可以把这个路径呢给大家看一下啊,就这里会有一个路径详情啊。

这是他的完整路径啊,然后我们可以把地址那一替换,写到这个什么这个代码中。

巴格里拉写上去,就我上传上传到这里啊,哎,来个红颜色的好来写上去。

然后这个access k呢和这个东西呢,就是我们说的这个应用的那个东西嘛是吧,啊就是你要调用它的话,它这个地方是有这个操作的,那你就生成一个那个阿斯克斯K啊,这是我们前期给他生成过,在深圳过。
嗯那个生存的地方在哪里生成的,都搞忘记了啊,在哪里是在,这个X对象,右下角啊,我忘记在哪去了啊,我记得是在那个是在对象这个地方啊,都忘记在哪里啊,好久没搞了,还在这里看这里看到了啊。
他这里呢有这个东西是吧,你先把它启用啊,启动之后呢,嗯这地方是不是有K啊,好这里呢就把KD到ETY啊,这里有个这个K把K拿下来,那么他就说可以利用这东西来操作,你的这个对象,存储这个地方啊。
就是可以向里面查数据的。

那就是那个K我们把这个K那就把粘贴复制啊。

完了那么就是说启用状态,那现在呢你在搞完之后呢,我们就可以测试一下哈,必须上传文件的时候呢,比如谁上传的文件啊,哎他就上传了是吧啊,这个后面报错呢,这不是我们关心的啊,这个报错是因为这边的OSS存储。
那你要把它开放个权限,那就是这个这个开放的权限,他有个那个公共读啊,公共写的那个权限在这里啊,在哪个地方开的,哎呀忘记在哪里读写权限这里,那公共公共读写有的啊,这意思是代码的问题啊。
呃这个操作呢就是我们演示这个东西呢。

就是告诉大家碰到这种情况。

那他也是使用这种情况的,我们当时也是给大家说过,但如果说你用这种情况的话,用这种东西去操作的话,就会有一个问题,这个问题呢也给他说过,你可以看一下啊,当前我们去访问这个网站。
如果说进行基于文件上传的话啊。

你可以看一下,在我们这个如果说进行文件上传的时候,刷新一下,它会加载这个load js文件,JS文件在这个源代码中可以看到呢,泄露这个什么3K和这个id。

那如果我拿到这个东西,是不是就可以怎么操作呢,就可以用这个OS的浏览器。

用这个八吧,是吧,用这个来粘上去。

然后呢加上刚才那个防空字。

嗯这里用这个浏览器打到的。

那连接是不是就可以登录到这里,看到所有东西来。

对不对,这个在官方自带的工具啊,所以说你可以看到啊,这种文件上传稍有不深的话,控制不好的话,如果你用这个OS的话,就会带来这方面的安全问题,这种文件上传呢。

它和我们传统文件上传是两码事情啊,我们简单解释一下啊。

就是上节课上文件上传我忘记讲这个东西啊,啊第一个啊,传统的我把写了这个写到这个地方吧。

就文件上讲这个操作里啊,一种就是说有两种实现的这个架构,一种呢就是,商船,商船是这个服务器本身的这个存储,音磁盘里面啊,对吧哦还有呢就是这几种嗯,还有一种呢,就是我们说这里的可以采用这个什么。
借助这个人产品的那个吗,OSS存储对象去这个存储这个文件是吧,那么这种呢就是文件呢它会被正常解析,但是你如果传到这个上面去的话,那么文件就不能正常解析了,因为它就是个存储文件,这个文件访问和不访问呢。
它只能被访问到,不能被解析,也就是说那个后面如果说传到这个OS上面去,之后呢,也不能正常连接,就你后面即使传上去了,也不能连接,那么这个上传这种等于没有,这是我们前期在讲基础课程呢给大家演示过的。
大家不知道还有没有印象啊,来我们当时呢找一下这个OS的质量,那第三天的时候讲过的,当时呢给大家说过这个存储的一个影响是吧,但是大家还没有影响你在这里了对吧,影响着了,影响了上传文件和解析。
文件无法解析单独存储,所以呢就修复了上传安全是吧,当时讲过哈,是不是,那如果说你用这种东西的话更加安全了,但是它也会导致我们说的这个泄露安全问题啊,泄露导致的安全问题对不对,所以说啊。
你用什么东西就会带来哪一样的安全问题,那么就会对应哪些安全问题能得到解决,不一样的啊,这是文件上传,上节课上忘记给大家补充的那个支点啊,今天就给大家补充一下,好补充完之后呢。
我们接下来啊还是这个正常的做这个啊,PP的一些其他开发啊,比如说今天要讲的这个加工这个文件管理模块,就上节课呢只是做了一些显示和这个删除,那么这节课呢我们就是说如何下载呢,如何删除呢。
如何写入文件呢是吧,这些东西呢也要给大家操作,首先呢现在说第一个包含,这个包含是一个什么概念啊,我们先把这个代码打开啊。

呃这个包含是一个什么概念呢,啊很简单的道理啊,包含了在pp中有四个函数啊。

Nasa enclose include include uencoder,然后呢requests,然后enclose once request on,嗯他们有些简单的差异,差异呢,就是说第一个呢。
就是如果在包含的时候发生错误,脚本呢还会计算就行,用这个函数就是发生错误之后停止就行,那么加个弯时呢,就是说如果这个文件已经包含在不执行,就这么一个差异,就是这两个函数呢有个差异,就是一个是错误的运行。
还有一个错误呢不运行,然后加VX的话,就是在原本的基础上面呢多了一个包含,就不允许不包含,就人性就会多了,人民东西,其他的没啥,所以这四个函数的一些差异都写上去了哈,主要他们都是包含文件的。
那么包含文件是一个什么概念啊。

我给大家简单说一下啊,就很简单,我们上节课写了这个呃,写了个upload a tm,就是你那就是一个文件上传的页面是吧。

然后这个页面去上传文件的时候呢,啊这里是上传文件。

上传文件的时候呢,对不对,上面文件的时候它会提交给这个upload pp。

那他的提交在,就是说他的这个商船的这个upload a tml呢,只是一个页面,它没有具体的功能,就是显示页面,就是给你看到这个上传的这个页面功能,就是把这个文件来进行商传。

怎么判断呢,它是给提交给这个upload pp的,所以给了人命。

这个文件主要是上节课讲的,那么这个文件呢,就是对这个文件来进行接收和处理,就是他怎么去上传了,怎么去移动啊,有没有过滤啊,都在这个pp代码去写,就是前端的把文件传过去,后端的进行验证和处理。
就这么一个流程啊,那么这个包含的话就很简单。

你意思就是说你要访问这个upload tml是吧,访问它才能上传文件,那如果说你访问这个upload p1P呢,他的访问就是这个东西。

就没有那个商品页面,那这个时候如果说我要把这个TML的文件呢,该怎么样包含了,这TM就是一个文件的,来两个文件来形成的文件上功能,我现在用upload一个文件呢,把功能全部写在一起。
我就可以怎么样进行一个include,知道吗,include include什么的,upload点一下嘛是吧,我把这个文件把它包含进去,包含进去之后呢。

我重新再访问它,你看它是不是就把那个TM执行了呀,把这个TM执行了,所以我就相当于说只访问这个文件就可以了,这个文件呢就是我不访问也能进行文件上传,对不对,所以这就是文件包含的意义。

那么这个文件包含的意义在这里,它会带来哪些安全问题呢,就是如果啊他如果是写这种写法,他这种写法呢,比如说这里呢这个东西呢进行一个传参,就是这里面有参数,就是有控制的东西。
比如说写个这个叫N7写这么一个东西,那这个东西写上去之后会造成什么现象呢,啊就就就把这个写上去,那么他选择回去的话,上面这个虚假线,那么你在访问的时候就很简单。

一方法不漏的,他还是这个错误,是吧,然后你加上这个参数NG等于这个upload,让它包含这个什么upload点,Tml,你这样去写诶,诶他就能正常了是吧,所以说你想包含谁就包谁。
你比如说我包含个index,对不对,太可以了,应该是PP哎,它就显示P的验证代码,包含谁就显示谁就执行谁,但这样子就会造成一个危害,包含的文件就能指定。

那么我们就可以随便呢在这个网站上面是吧,创建一个什么任何的一些脚本,比如说我这里呢在这里创建一个文件文件呢,就叫这个一点TT一点TT里面呢,我是写个东西,写个PP的这个什么代码,比如P服务,那么同理。
如果这里是个home代码的话,也是一样的道理是吧,我写个拼命运动写什么东西上去,这是个TT的一个文件啊,当然你去访问的时候啊啊,你去访问这个TT的时候到一点TT,那它也是这个样面对吧。

但是你如果用包含包含这个节点接近那里,是不是要执行这个代码。

那么这个ETT如果是后面这个地址,不就是一个地址吗,所以说这个文件包含了,就和我们后期要上到这个文件包含多种,那是相似的,就是由这些函数在用它的时候,后面这个包含的文件搜我们的空子,导致的文件包含漏洞。
那么为什么要进行文件包含,我刚才也给他演示了,因为它包含了,就意味着可以把其他文件调用过来运行,这样子呢是方便于我们的这个开发的,就相当于说你可以一个文件当几个文件时,而且很简单。
道理这样子呢编于你这个代码的情况就很简单,如果说你要把公屏显示,你直接粘贴在所有代码复制到这里才行,那你直接一行代码包含不就行了吗,但是你如果做做这个包含操作的时候,你有包含文件。
让这个用户的自由选择包含水,那这里呢这就会造成文件包含漏洞,所以我们为什么说要讲这开发,其实呢就是从开发的角度上面去研究这个漏洞,就说这个漏洞为什么会出现啊,为什么会出现,你把这个开放的走一遍。
你就知道这个漏洞是怎么产生的,所以说漏洞的产生呢无外乎就是两点情况,讲到这里,我就可以把把这句话给他说了,两种情况,什么情况,什么函数造成了什么漏洞,两个核心的一个漏洞条件就是可以控制的值。
然后使用的什么函数去执行的这个值控制的,这就是我们用户提交的恶意数据,什么函数,那就是什么漏洞,用这个包含漏洞的函数,用包含文件包含文件的函数,就是文件包含漏,用文件上传的这个函数就是文件上传漏洞。
用其他函数就是什么其他漏洞,所以漏洞的诚意呢,就是程序员在开发代码中使用的函数,决定加上一个可以控制的变量导致的,所以说漏洞的原因呢就这么造成的,那么具体什么漏洞就和这个函数相关,那么这个是文件包含啊。
他为什么要进行文件包含,刚才也说了啊,就不要问我为什么要进行这个事情啊,因为就是提高开发效率。

那么在使用不当,操作不当的时候,就会造成安全漏洞。

那这个文件包含就不说了啊,那么接下来我们就来写一下,这个开发的这个代码,这个呢是文件上传页面,我们上节课的只是写了文件上传和显示,那么现在呢,我们就来说这个页面是怎么设计出来的啊,首先设计呢它是分几步。

我们就对这个页面呢把这个流程再走一遍,首先呢我们观察一下这边呢是有这个什么信息。

那这信息是哪个啊,这信息呢就是用TM设计出来的这个设计,那我就不讲了,因为这是前端的一些这个央视设计啊,就像我们说的啊,这个前端的一些这种样式设计,那不是我们学习内容啊,这个东西呢就是你做网站开发。
自己要学的安全里面就不会看这个东西。

因为这个显示方面的什么美观呢,这个和安全不不相干啊,没有任何联系,所以我们这边就直接把那个页面呢,给大家看一下啊,这把页面呢在网上随便找的啊,来看一下,我这边先创建一个文件。
文件名字就叫做这个up不就叫file。

MANAG一点PD好,那这个文件的设置好,我们首先呢把这个tab页面给他写上去。

这个页面呢就是一个类似的表格。

是一个类似表格,我也给他直接粘贴复制啊。

就在下面啊,就这个东西呢,就这里。


那就这个东西啊,来看一下,把粘贴过来,这里呢先前是没有这些东西的,我先把这个去掉,先把这些东西都去掉,就先把它这个页面的设计出来,就是那个央视的那个情况,先把它搞出来哈,好大家看一下啊。
来看一下这个页面的一个结果,那现在就出来了呢。

图标名称啊,这个日期大小是吧,就出现这个东西了,我们这就意意思就实现功能了啊。

实现什么功能,第一步呢这个图标呢就是一张图片,这个图片那就是路径地址,我现在找了一个什么image list png,还在网上随便找了一张图片啊,这个图片那就放到这个目录,我们创建一下吧。
image目录,然后这个是list就代表的是文件夹的图标。

我们就在网上随便找个图片,啊随便找个图标啊。

就是文件夹的这个图标。

随便找个啊啊,就随便找个吧,这个吧,另存为啊,左边就叫list png。

好把这个图片保存下来。

复制粘贴到这个项目里面。

三个你来好,那这里呢我们就大小控制下来。

二十二十,我们再来看一下,这里刷新一下,看这里啊,诶那个页面呢,所以你看就显示这个文件夹图标,对不对,在文件夹图标,然后这边的file就是文件的图标。

就是文件的图标,我再找个文件图标,我这里就不找了吧,我就直接把那个图标随便找一个就完了啊,代表文件的图标。

用GP文件图标吧,随便找个。


要不找个了,就这个吧,我这个是吧。

去掉点P分析。

把这个图标呢给它粘贴到项目中。

再用五进去好。

那这个呢就是显示文件文件的那个。

呃东西的图标啊,好那页面呢就写完了,我可以看一下,那现在是这里啊,那这个是文件夹。

这个是这个,PP的那个文件名称,这里如何获取这个东西呢,首先我们还是一样道理啊,现在写代码获取这个央视列表。

就获取所有文件夹和文件内容,上节课也讲过这个显示操作啊,呃具体操作呢我给大家给大家试一下啊,首先呢呃它是获取这个就是open dr是吧,打取这个目录,对不对,然后呢我们再来设计个变量啊,Dollar。
喷子啊,就是路径等于大幅下滑,get传递过来的这个喷子值,最后如果你传递啊,如果他没有传递的话,我就把你攻有路径呢就是这个东西是吧,那就是说如果有权力值的话,我们就以权力值能为路径,如果没有权力值的话。
我们就是当前目录把加上去读取,读取完之后呢,在上节课已经上过了啊,上节课已经讲过了对吧,这些东西呢我们就可以把它简单的复制,粘贴一下就完了哈,重新改名一个名字啊,然后呢再用这个wide dr。
来例子DR来读取这个什么目录对吧,这个上节课讲过了,我直接可以把它粘贴过来啊,读取这里面的路径啊,判断这个D呢如果是吧,一直有的话,就进行循环循环操作呢就判断这个文件,那么这里呢我要改一下。
我改成什么呢,啊我这里改什么,就改这个上面的啊,来,呃或许过来之后那进行一个判断,为什么这样判断一下啊,我先给大家看一下啊,就是说如果你不判断的话,我可以直接输出输出这个什么dota file。
然后大家可以看一下,先看看效果,它就会显示呢把所有东西写出来,然后显示让他换行的话,我们来换行啊,DR对吧,换行一下,然后这个页面显示文件文件内容的,把画一下啊,你看这个结果了。

这就显示了有点和谐两点了,这个就是默认的啊,我们先把区域掉下,就给加个衣服进去啊,如果这个什么dog file是吧。

等于等于什么东西的时候就不显示这两个,就把这两个呢不显示呢,就判断它不等于点不懂一点点的时候,就那两个二八删掉就不让显示那两个啊,对不对啊,写进去panda glam flam,就这里啊。
file叫film,对他这个film不等于这两个的话,那么接下来再来的话啊,我们是不是要进行文件和文件夹的显示啊,就说这里呢是已经得到了,它可不等于这两个之后你就输出这个,来看一下啊。
那他现在呢就不再显示那两个点了是吧,放行一下看一下,那他就不写上两个点了是吧,两个和那个一个点和两个点就不显示了。

我就只显示正常内容,就把那两个去掉了,一次就错好,那么现在呢就是要对这个东西来进行判断。

因为这里是有文件和文件夹的,我如何把文件呢归类到这个图片里面去。

文件呢就归类到这个图片里面去,是不是要进行一个判断判断的,上节课讲的是1DR,那么现在呢我们可以用两种东西。

用这个角fail top,fail top来判断,叫他们来判断,那我这呢先给大家看一个简单的这个演示代码,比如说啊,我用fit up去判断这个当前目录下面的这个角,upload的话,他在讲话啊。
这是他们是upload啊,upload iPod这个东西,把结果输出一下,它的结果是什么,看一下STR目录,如果让我判断是upload点T的文件,他就file,所以这个是他判断啊。
判断文件类型的file,那就是文件返回,所以我现在就可以用这个东西来判断,是不是怎么写了个例子啊,所以我就可以用这个算好了tap了,要判断这个什么gm值,他这个PHILM值对不对。
这个判断它判断它是什么,是目录还是文件,对不对,那么如果说是文件的话,就显示到还没写完啊,就先到这个图标里面去对吧,如果不是的话,就做一下操作,那么这边呢那翻盘棋就是加上路径。
这个路径那就是那个TCH路径,就是完整路径啊,这个都可以把它写上去啊,这个是判断它的一个值,打两个大把,那3000到正来,这完整的东西啊,这个就是它变量吗,变量这里传过来的啊。
好然后这里呢就是把它的这个类型呢搞出来了,我们可以自己输出一下当前类型的一个特点,给大家看一下啊。

你看啊我输入一下,打开这里,你看是不是就是FILDR,Fil dr,就是先看的是文件目录目录文件文件路径好,那么现在呢我们是要显示显示这个界面呢。

就说这里这个图标。

这里为这个图标,就显示文件夹的,那么这个图标就显示什么显示这个啊文件的。

那如何把文件和文件夹归类呢,我这里用那个数组,用那个数组什么数组呢,就是把这个接收到的文件名呀,把它复制到一个数组里面去啊,怎么操作啊,来看一下呃,操作在这里呢直接代码呢也提醒好了。
那声明一个列表列表里面的呢,把文件类型写进去,就是这里呢这个值就是我们说的DR和file值,然后呢加入一个列表列表,再叫film的索引为film,film ping路径为它的路径。
塞子呢就是通过我的这个换算是吧,把大小算出来,它是这个字节流嘛,除以1024,就是它的KB大小,然后fat time就是他修改时间,就按时间呢,这样子呢用这个time呢去读取它的修改时间啊。
用这个东西的文件的这个修改时间的,来去读取这个文件,把它复制到列表中,就是把文件和目录的封装成四组,所以在这里呢我们就看一下啊,就可以这样写了,beast对吧,然后呢加个索引索引里面就写上类型。
这个类型刚才打印了啊,就是对应的就是我们看到了什么DR,DR那些东西就等于什么呢,A r a y,然后呢在它下面的去写这个什么,写这个数字,对不对,就按照这个来了啊,来先去封装进去。
那么封装的这个流程呢也非常简单,也不难啊,就在这里呢封装好啊,这里呢就封装这个里面的几个索引,这个数组大家不知道有没有学过啊,没有学过,可能有点难理解,好学过的就是很简单,简单来说就是这么一个结果啊。
给大家说一下啊,比如说这个数组list,他这里有个东西是吧,比如说这里写了个东西比较X,然后呢它对应的值是小于一,就可以这样写的,内蒙等于小题,然后下面继续提出,这里叫,A级就是年级是吧,30哎。
然后这个时候呢你就这样去用它来list是吧,name对不对,它的一个结果那就是小B,然后呢你如果说list a级是吧,他就是30就这么一个概念啊,由于很多人没有学过,我就简单说一下啊,这个实在不懂。
那我也没办法,因为这个东西是开发的,首先要说的一些东西啊,这个是二维数组是吧,还有三位数,这有多数组,还有这种情况是吧,继续加一个东西,就比如说呢他这里再写个A级,等于这个,然后呢他把它括起来是吧。
里面还有一种就是这里呢就就像我这种啊,那还有多了这个还多了一个另外控制,就这里写几个,比如说历史是吧是吧,然后里面呢写个name,然后呢name里面呢又加上一个值,比如name里面是有小迪。
有这个什么这个小DSBC是吧,然后呢他就这样就有list了,啊name是吧,从里面去筛选啊,比如这里的小题叫它也叫小题S1,它就可以这样调用啊,再加个小D,然后呢他就等于什么小DCC就是它下面的。
有些人说这里是他一个等级,下面有一个对应的这个值和结名啊,他会这么我们这种的就是这种情况的声明,一个,生命的这个地方嗯,说明这个那个,然后呢在它下面有留空,留空之后呢,就给他展示的东西。
那么具体展示我就要粘贴复制过来看一下,在这里呢就是list,那么这个词就相当于是一个什么模型呢,这个只是个模型呢,大家看一下啊,啊这个值对应的模型就是这样子的啊。
由于这个当初pl呢就是我们说的就是等于DR,或者什么等于file,就是一个判断是文件夹还是文件,那么如果这里是DR的话,那么它相当于就是list里面的什么这个DR。
然后呢下面有值值里面就是对应的四个对吧,那这个呢就等于冒号对吧,它的值就等于这个变量,对不对,然后变量是多少就是多少,哎就这个理解啊,然后一次都好啊,这次这个是吧,然后它的值是吧,又是这个变量。
他有这个东西就把它封装成这里啊,就这样啊,一直往下进行,他有这个情况,对不对,所以呢它把它封装到这个历史了之后,我们接下来的话就可以显示了啊,显示什么啊,那我们就用这个代码呢,这里呢是显示图标的。
显示文件夹的,我就可以在前面加上一个什么,加个PP语句,写个什么TP for each for e是什么呢,就是从列表从数组中去循环,从数组去循环循环什么呀,就是把这里面的这个值把取出来。
把这里面的值取出来,八字里面是失去了啊,呐放一起,那for一起从这里面去取这个dr as a,非就是把里面的所有只能复制给这个DOLF,非非里面再调用这个flame,那么就等于什么呢。
非得就是来到这一级调里面的FM,就是取出一个变量值,嗯能不能理解,不知道能不能解啊,就是用for一起去循环里的值,因为它的所有值都写到这个列表里去了,你在这里那就显示把它写上去啊,那写上去写好之后呢。
啊这个呃file list,那就是等于这里的list啊啊先先这样把取代下来,list是吧,先去,然后呢你看啊我们的第一个是图标,我们第二个字是什么页面的,第二个是什么,因为第二个是是这个名称。
那就是等于什么,apple输出C里面的什么,获取的是个flame,在这个获取的名称,取这个值,那我们来刷新看一下,那那那我这里呢写完之后要有一个结束语句啊,还有这个结束语句,HD结束粘贴过来,要看呗。

是不是写出来,你看文件夹,这里呢就只显示文件夹,你看对不对,直线是文件夹了,就是把数组里面把循环出来。

然后在这里加上的是名称,第二行是什么日期,我们就一次从这里取出日期,现在的日期是什么日期,我这里获取的是这个fat time,对不对,列表说一次FTIME,所以改成fat time啊。

意思看下日期出来了,大小是FACSIZE,由于文件夹没有这个大小,文件夹没有大小啊,所以我这里写个这个斜杠,斜杠路径就是它的路径,就是这个什么获取过来的单盘棋嘛。

单排挤这里获取的路径是路径,等于这个词它的完整路径,然后这个类型就获取这个,第四个就是什么录音。

就是弹起取出在里面所引的这个词,看下路径就出来了,哎你可能说路径会不会有这两个啊,因为它自动加了个点斜杠啊,这个不用管它,我等后面可以把它删掉啊,写出来了,然后这个是文件呢,文件再怎么写的。
文件就是在这个图标下面的是吧。

继续写的文件一样道理嘛,D把这个拉拉下面来,如果是等于这里是文件的话,下去,那这里就说这里是文件的话,因为这里是登DR,所以说写file啊,能不能理解呢,刚才这里呢是获取这个文件类型嘛是吧。
获取文件类型,那么第二就像说你这样子一去获取的话,它就有两种情况,一种就是等DR的,那么这是DR的,还有呢就是等于什么等于FIED,对file也是一次有个数组,然后这里就是判断嘛是吧。
这里呢就是判断的从file里面去编辑,刚才那就是编辑书目录的,让它显示这个图标,那么如果是这个对于文件的,就让它显示这个文件图标是吧,以此呢再把这几个呢是吧,把T换下就完了,对不对,需要在哪里,对吧。
想上去我们再看一下观察这里诶,哪里写错了。

我扫了个少了个TD吗。

TD哦少了个TD,先把这个T区域吧。

嗯对哪些错了。

Slog,这是显示文件哦,这里又少了这个,这个我想起结束啊,它是一个结束,一把选举那出来了。

你看文件呢就显出来了,你看变出来了,但文件这里有大小啊。

所以我这里大小是要改掉啊,是要显示这个哎大小是file size嘛,他写上去看FC存储的file size,这结束的cs就等于获取文件路径,文件路径就是文件的是吧,要求要量是日期。
就是这个日期换出来的是吧,就是把前面这个获取到文件呢,从这里面提取信息呢,文件名字就存储到这个列名建筑里面,我觉得简单写一下,这样写的就大概能明白啊,就是呢这个文件名存储是吧,这个兼职,就存到这里。
对不对,那么这个呢就是存储的嘛,这就是存储路径的是吧,路径,就存储在这个键值里面,诶,同样道理啊,那这个呢就是,文件时间,文件时间呢,这个文件时间呢是通过换算的文件文件啊,换算的。
那么用这个file c换算出来的除以1024是吧,然后呢换算出来这个值呢全输进去,就是文件大小,然后这个呢就是获取什么文件的修改时间,换算文件编号获取的这个获取文件,直接把硬硬的并存储到什么这里面去。
对不对,那这个呢就是相当于这里呢就肯定啊,就是这个file pi呢刚才也说过,在FPX呢它就等于DR什么file,那么你现在说file存储到file里面,那所以它的结构那应该是什么。
Doubtful list,一种情况就是,这种叫DR的模式是吧,和他这个列表就是有两个,一是这种,对对对,因为当时呢我们去获取这个文件类型的时候呢,啊一个就等于第,二个就等于file,所以呢。
这里呢在服把它只写到这个数组里面的时候呢,所以它有两个啊,DR的存储,一套FID存储,一套都存到里面,然后呢一直在这个显示显示什么,显示文件目录的就把它取出来啊,显示文件的就把它取出来。
意思呢显示到这个图标下面,所以呢最终结果我们就看到了是吧。

那我看到之后,我们是不是一直在这个上面点操作呀,比如说这里呢打开操作目录呢,我们就使用打开就进入到下一级目录,那么文件呢我们就提示有编辑,下载和删除几种功能,对不对,那么如何先把第一功能文件夹。
这里来实现这个什么使用这个打开对吧。

那么如何实现打开呢,就是相当于要下面一级嘛,那么现在呢我们就来实现打开,打开这里呢就是要在他这个后面这一栏,就是这个操作这一栏写这个东西嘛是吧,写什么写给一个操作按钮,A标签AREF打开。
打开了打开先把这个页面把它写的是吧哈杠A,然后呢写个打开啊,可以看一下,那是不是就打开了。

打开之后要传参全参数呢,就是要对这个文件夹呢进进进这个目录遍历,那么这里如何进行目录遍历呢,我们是相当于就是把这个东西再重新。

把它用一下就完了呀,是把这个东西把代码重新调一下就完了呀,所以我这里就可以写个函数,是不是就可以写个函数啊,写个什么调用函数,比如把它全部归类到一个函数里面去,叫bs get list。
da list是吧,然后写进去对不对,把这个封装进去,然后他直接调用这个函数,然后呢传他传,他是跟他组,对不对,就随意调用这个get list,调用这个get list,然后再传一个pi啊。
pi呢我就从这里取值嘛对吧,我们就直接访问这个文件后面加上pi值,然后传到这里,然后调用它,所以我这里就可以写了个什么get list,下载单机,把调用一下这个路径,对啊,这个路径是可以通过传参过来的。
也可以通过补全参,就等于默认,所以说我直接访问的时候,它就等于这个当前目录,如果我在这里呢选择打开,就是我要换另外一个目录读取了,我这里就等它跳转了是吧,给个地址喷漆等于什么,等于一个值。
这个值等于什么呢,这个真是什么,是不是就是一个PP获取过来的,这个叫翻盘起的这个路径,对不对,就是这个词嘛,所以就这样打开echo一下,输出到这个电动输出显示到这里。
接下来说这里的路径呢就是获取这个文件路径,来我们看一下,诶啊写错了弹起路径,那就等于,看一下R是哪里写路径,安吉路径里面就写了个这个,这个是这个是不是文件路径,我先把这个去掉下。
哦这个em上面正常显示了这出现哪些情况,嗯等于喷子,喷子没有节奏的人,他提高这咋不对呀。

哎这炮哪有输,有什么鬼,杂七杂八的问题啊。

刚才是正确的,加了个函数,不行呢。

看大家有没有看到问题的。

36行有错误啊。

等一下,哦这里哦这里哎呀,我说怎么回事啊,这里要获取他这个目录的时候,这里要给个值啊,就我刚才是调那个list嘛,啊我这里要复制个值,就这里要写个东西,忘记了,到你这个读完之后呢。
我先关闭一下这个close jr,关闭一下可乐DRDHH,然后呢HD然后呢再就是这个把它返回一下,返回一个列表值,就这个了,然后这个列表值啊,刚才忘记了,就把这个列表返回,返回之后呢,你不要调用函数吗。
对调用这个函数,所以我这里要加个变量,倒数历史等于几中心是吧,好看现在东西好正确了啊,你看就这里那不是要那个嘛,我调用函数要把它返回它,就是这里复制的水中也把它返回。
然后我调用的时候把它用这个例子来结束好,下面呢就这个东西在调用啊,就这个意思啊,刚才那有这个操作好了。

看这里又打开了,我们来看一下,打开一下,看能不能进行这个调用法。

你看打开之后呢,那这里呢就会以此打开时候呢就把这个路径,那就等于这个嘛哈来试一下看行不行啊,这里面都没写分号,对PP都没写分号,算了不写他不写,没没没有没有说有毛病,那我就不写了,正常来讲。
这个语结束要写分号啊,我先看一下。

来看一下,打开打开这个目录诶,你看是不是显示了,你看是不是调用了,你看打开,你看上面就传参嘛了,传一个参数IDA就获取这些了。

就通过它把它输出的这个D这张路径打开了。

正常了,那么一次啊,我们点一下其他的检验,这个upload里面的,upload里面的来打个upload,upload里面是空的,本来就是空的啊,这个里面的,这个不来打开。
你看它里面的文件夹也是正常显示是吧,然后你再打开里面再打文件夹,你看诶他也正常显示,你看是吧,哎再来啊,是不是都知道显示那上面全参那个路径嘛,对不对好。

那这里就是说这个上面的这个功能,都都实现了是吧,那通过这个比去这个把这个路径呢给大家想去,那么传参传参呢它就会传到这个奶妈是吧,一旦有有值赋值了,然后呢他就调用这个函数是吧,然后这个值就会发生更改。
就让你直接访问的时候。

你直接访问的时候呢,它就是获取当前目录,当你呢有操作其他目录的方式后。

那它有参数,所以呢有参数的话,那么这个喷气就会随之更改,所以说刚才为什么呢,我要把路径再加上去,因为完整路径嘛来写上去是吧,就等于这个东西,那它调用这个函数,调用函数就像是重新执行一遍吧。
把这个函数就重新获取一遍,就显示到你的难不好啊,逻辑就正确了哈,那么现在呢就说这个东西搞清楚了啊。

打开是正常了,那么现在就来设计这个什么这个,文件的事情了啊,文件的这个什么编辑啊,这个呃删除啊,这个还有这个编辑功能商,全编辑功能和这个删除功能和下载功能好,我们现在搞最简单的这个删除功能。

那么在这里呢我们就写删除功能啊,这个功能就在这里面啊,那么首先一样道理啊,就写了几个这个截图录音依旧和上面一样,把这个A标签写进去,AARFEF要是调用这个相关的东西啊,等于一个路径,然后呢这个是杠A。
然后是比说是第一个是这个编辑是吧,有编辑那么一次啊,写了几个啊,这个是删除下载啊,这个是删除,然后看一下这里页面,那你不是有这几个了,然后再写核心功能,比如说编辑下载删除,我们先说下载删除的最简单的啊。
那么删除呢嗯删除是什么呢。

对不对。

删除删除呢,我们就是相当于说啊,可以使用一个这个结束值啊,它为DL的就进行删除,然后呢如果为当作为下载编辑的就1D,所以我这里可以传入一个参数,就是这里呢写个什么,放过这个呢,删除的我就给他写个路径。
问号DL等于什么,等于一个值,这个值呢就是获取的是路径值,删除这个路径值,获取这个路径了,就删除这个文件了,把它写进去,那么这里呢就相当于说DL,后面就全参这个路径值,把它写进去,对吧,嗯在哪些问题啊。
问号第二批评和路径,对的呀,问号目录这里少写了个这个符号,好好,你看这个是删除删除,那就是问号DL加上这个路径,就是说告诉他有删除,那这里写个DL对不对,几个D啊。
我们这里就可以用一个东西来结束这个调子,对不对,我们可以写一些东西啊,写个什么,写个这个叫XXXX等于等于什么呢,大家看一下啊,嗯嘴巴谁也搞过来了,那直接用这个X等于这个判断值啊。
这多了一个判断1SDR呃,这个叫dl get接收IA的值,A的值如果有设置,那么就结束它的值,如果没有设置空的话,就等于为空复制GRACTION,那你可能会说我接这个action干嘛,复制是A字啊。
那么这里就是A等于DR,我就给大家写上去啊,哎那你呢删除,这样就等于这个DL呢传递的是这个后面这个值,然后呢这是删除文件的路径,还有可能就是给他传递,我是要删除的操作,所以我就给他传递一个A等于D号。
然后呢再给他传递一个阶段,不等于这个文件名就告诉他我要删除A方法,等于DL连接file传递文件名,传递我们这里获取的文件名就触发这个链接,这个时候呢我们就可以写一个叫switch判断。
然后呢参数是XX呢,就是这里他不是结束这个A参数吗,有的话就等于A的值,没有的话就能空,所以我们就判断action的一个值叫case,case如果这里为DL,就是进行文件删除。
写写那个p Python代码,写多了喜欢用猫号,其实这里是郭浩的K4等于DL,那我们进行删除,删除的这个操作非常简单,就是UPLIDOTFILE。
然后传递这个dollar file abc就是删除删除文件,这个文件就是这里传过来的,什么传过来这个fan party嘛,所以我这里还要接受file的值是吧,这个file值get权利吗。
所以我是不是要继续要设置一个结束,这个文件名啊,就一个结束到你的方法啊,我就是解释方法的啊,这个是解释方法的解锁方法,判断是怎么操作,对不对,解决方法,那这个是解锁方法的,还是不要结束这个。
这个什么这个files啊啊这里就结束files,我解释这个喷几次也行,就传递这个路径也行啊,好我们就解释个喷体制吧,等下把那个后面改起来,接着喷几次,把它拿出来,结合喷几次啊,那结束喷几次get。
那我就把这下面改一下啊,有个解锁files文件就喷几次吧,就是后面改成蹲起也行,接着喷几次,那么这里呢就是传递过来,这里就是删除这个喷漆吧哈,如果它等于它就删除它,然后再进行一个break就挑出来。
好好我们试验一下啊,进行一个文件删除,看一下,现在行不行啊,来访问一下,那这里有个叫test。

我们点一下删除,点了之后,那你看看路径呢,就是呢A等于DLPY等于test5,然后后面他这里写错了,你看这里有个A呢没有冒号加上去呢,文件都写错了。

所以我这里呢应该是没有加问号,把问号加上去,就是告诉他的当前文件夹。

那重新再来一下,点一下这个test5点删除,你看这里就是哎怎么还是没有那个。

都几年你没了。

传递是传递了来路径传递了,然后A范围全力了,后面这个问号怎么还不传递的。

这个路径我还要把它写上去啊,你妹的写吧,获取当前这个菲尔,如今就是这个这个文件,当前文件执行路径就这个文件名啊,可以用这个叫dollar s,算了算了,不用这样搞,这样搞太麻烦了啊。
他这个怎么没有没显示。

估计看一下,点一下删除,点了删除之后再没反应,我们可以看下这个点删除的路径,复制一下路径对了,现在对了,你看翻盘起来A等于多少,但是在这里一个报错。

那为什么报错呢,就少了一些什么东西,我来看一下啊,就是除了这个要判断它的操作之外呢,这里还要进行一个判断这个路径的一个东西,就说如果是他的这个文件名再加这个东西啊,你不要问我为什么加东西。
这是为了检测的,那或许它的文件名路径把这个加上去就行了,他也不会搞错了啊,接下去。

好我们来看一下,那我们点一下那删除,这里点下删除好,他没有任何反应,我们刷新一下页面,嗯没有还是没有啥情况,还是有这个test5,所以没有删除成功,没有删除成功,我们看看这里啊。

啊action呢是结束这个A过来的值好,那EG值呢我们给他输出一下,看我节奏对不对啊,八个输出一下,写到这个下面吧,看下这里结束对不对,先出一下这个问题,看看节奏对不对,对吧。

这里面写xx,那我看一下,我点删除这输出那个等于DL,那说明是对的,那么说明这里A型是等于DL嘛。

DR呢K4等于DR,就执行这个删除这个路径没问题啊,但这里呢我看我代码里面啊,应该是全局是file,获取的是文件名,所以这不应该是do啊,写file来,我们再来试一下。

好来看一下啊,顺便刷新一下,那我删除特色5。1下删除好,我们再刷新一下页面,你看test5没有了,那文件自动消失了,那我可以创建一个文件试一下。

比如说我叫一点PP保存一下。

刷一下1P也有点下删除。

再刷新一下页面,你也没有了。

那文件自动消失,说明这个删除成功了,那么依次进行,删除成功之后,接下来就是K等于什么,等于这个下载的就叫邦就进行下载呃,这个下载呢就是要进行这个操作的时候,那这个销售时我们继续把链接,把它复制粘贴一下。
以此一次的老黑就传递什么当参数是吧,告诉他我要进行当就要进行下载,下载哪个文件呢,就下载这个文件嘛,对不对,告诉他,那么下载如何操作呢,下载呢就采用这个方式呢。

可以设置文件头部来进行下载,就直接把你的文件头部呢改成这个东西,就是我们为什么说有些文件访问起来的时候,是访问邮件来进行下载,其实就是把文件数据包里面这个东西得改,改成了,就是这样子啊。
然后用这个RADR去读取,它就会自动加载,这个呢不好说原理啊。

这个东西你不需要理解原理,你知道这样操作就可以了,就设置一下你这个稳定头部在网上找的啊,然后这个操作呢嗯就是有点麻烦,我把代码直接复制过来,你知道就可以了,这东西,这个文件头部就是让这个你的访问数据包。
你的文件app数据包里面再给它固定,它的头部,就为这个狭窄的一个操作去读取,它就可以下载了,那我们试验一下,这个是往下的啊。

这个没什么原理可讲啊,这个是一些这种下载协议。

就是一些浏览器认定为是下载,它就是这么一个情况,那你点一下点下载了看一下。

比如说config app点下载,你看是不是下了,你看下载了,你看但是它传递的参数问号A等等。

然后PCH路径,然后我看一下啊,这个地方打开代码是吧,它的下载下载就成功了,是不是下载搞清楚之后呢,继续就是最后一步编辑,因为编辑是最麻烦的,所以呢我们留给最后再讲1K等于CYBLAX,E d i t。
那么就进行下面代码自定,那么编辑呢,就相当于说我要对这个整个文本进行编辑是吧。

我点编辑之后呢,他就编辑是吧,首先呢我肯定是在这里呢传递一个参数。

编辑这里呢依旧也给他传传什么参数呢,也是一样的道理,这里就换成什么edit,也是要编告诉他我要编辑这个文件,那么告诉这个编辑文件的话,编辑文件是要有一个文件,对象和文件内容的显示啊。
所以我下面是不是显示一个文件内容啊,就是我要给一个页面,他去这个显示了你要编辑的文件的内容,它的原内容是什么样的,你要编辑是怎么样,再点确定就编辑了嘛,是有几个过程的,那我们思考一下,我点进去之后呢。
是啊,首先呢要有一个这个什么,有一个这个有一个这个输入输入框,显示这个的吗,这个原本的什么文件内容,是不是你首先要有这个东西啊,所以这里就有几部啊,我们这边可以用到这个参数来叫FIGMCAS。

读取文件内容,我就直接用这个参数先用一下给大家看一下了。

watch读取文件内容,读取谁呢,就读取这个变量表,就是我们传递过来的读这个文件,另外传的是file,就读这个文件的内容,内容呢我可以进行一个叫content,content就叫content对吧。
然后呢我可以把这些输出给你看一下啊,先给他看一下来,我先实现这个功能。

我就是先把它解释一下,你看我这里的提交这个这个CONFIG的哈,我们点一下编辑,你看他是输出了啊,这个是他输出的那个那个结果。

我们可以看一下源代码,源代码是不是就有那个的CONFIG的那个那个内容,你看就在这里嘛,你看有的吧哈所以它能实现啊。

但是呢我需要用一个输入框来存储它,所以我就可以怎么样呢,写个TM代码页面先啊,先搞个页面出来,先搞个那个呃显示的那个页面出来,那么这个呢也是前端的知识啊。

也是前端知识,我这里呢也提前给大家看一下啊。

也是个前端知识啊,那就这么一个页面给大家看一下啊,效果这前前端知识啊,就是搞个那个表单来结束这个字啊。

我先给大家创建一个文。

创建的这个叫editor,也一条毛。

啊这是那个内容更改了啊。

这文件名文件内容,那给他一个输入框,这个输入框就显示内容,然后点提交是吧。

就一个ATM代码,文件名就是一个值文件内容就显示这个代码,然后我怎么办呢,我觉得这个内容显示到这个里面,是显示这个内容里面,是不是,然后怎么操作的呢,首先把这个内容这代码写清楚了,这是ATM代码对吧。
这TM代码TM代码啊,然后怎么办呢,我把内容写到这里来,我怎么办啊,这个是内容获取的内容,这是TM代码,我把TM先给他搞上去,写这个代码里面来好,这是HM代码,然后呢name值,对吧啊。
然后还有一个这个哎就是先搞个输入框吧,我先给他看个输入框呢,比如说我这里,那就写个那个输入框的参数呢,这是个输入框的,先来看一下效果啊,先看效果,我们再说这个后面细细化过程。
那这个数框就把内存改为test,然后呢,这个V6值呢就等于刚才那个变量叫CNT,NT是吧,然后呢这TM代码嘛,我就把这个TM代码呢给他输出一下是吧,叔叔再来写了,就没去,就把TM的输出到这里面来。
然后这个非流值就是我们那个表单里面默认值,就把它加到变量名,就把变量设置它非流值八进行一个显示,对不对,八起这里用单引号啊,因为前面是双引号,这里就用单引号,双引号呢是用这个变量的能够识别出来,对不对。
哎我就这样写啊,能把这个,先去你看,现在我们看一下啊,我点编辑,大家看一下啊。

会有个什么效果,点编辑,哎妈的什么鬼啊,点这个伊利CONFIG,你看是不是他有个输入框啊,你看有输入框的显示内容,但是这里面显示不好啊,这是书,单纯的我要搞个那个大界面的呀。

所以这个呢就要换成我们刚才说的这个,这个模式嘛,要换这种模式嘛,啊换这种模式呢,它就显示的完整一些,来换这种模式,主要显示到这来,显示到这来来,我意识的把它一改,然后把这理论加上去,居然显示到这边来。
现在这里面啊,然后呢这里是内蒙呢,就把它就叫,太多了啊,我还是先这样子吧,我搞个TF代码,就让它在这里显示,先让它在这里给他看到效果就可以,就相当于说我要让它显示到这个编辑框里面,编辑框里面。
但是刚才那个编辑框太小了,它占用不了,而且显示也不太友好,所以我就搞了个这种列表框,就是TM的列表框,就用这个东西来写,但是这里呢说实话,这实在是太他妈的麻烦了啊,我要一个一个改这里面那些东西,唉。
算了吧改吧,行书,这个是行书,然后为什么要单引号,因为里面有变量啊,这里面有单引号,外面变量那里再用双引号,内蒙值就是给他一个叫就叫这个坎单的,也叫content,然后这是值好给大家看一下,前面的是。
单引号那里是单引号,后面呢就是这个斜杠双引号,结束语句,这样子呢应该差不多了,再选用双引号,先给他看一下这个界面效果啊,那算好加进去,我们来输出一下。

他就点一下,编辑之后呢,这边就有个竖框了嘛,这个数框里看到数框没内容啊,是数字化名哪一种啊。

所以我就需要有个内容写进去,内容呢我就可以在这里的赋值了,就在他这里面写了个什么VIVO,我直接用那个值行不行,看一下啊,内蒙只是他的全体的那个参数值V6,是不是要写的看一下啊。
就等于这个BP里面echo一下dota tennis,我这零命啊,看下,就是说他这个表单里面的默认值。

就等于我们解释过来的,读取过来的,你看有了有了之后。

他写在哪里又有错误,好麻烦的,那个代码没复制好吧,哎呀我直接用我那之前写好的啊,这个这个和天模拟器界面搞得真是麻烦,就是混编里面很多东西要改,啊这我爹写好的呢,就是用这个表单把输出呢。
这个是显示那个内容的,再给他看一下这个效果吧,那我把这个拿出来,我们就说那个设计上的一些差异啊,这个花点时间就行了,这不是什么太大的技术点,要看一下这个设计好的,这个它里面的code code是非洲啊。
非洲这是content as,就把DNA都写到这里来,你看现在我们看一下,我打开这个CONFIGPP。

你看它就显示这个列表框里面,你看显示了吧是吧,读取的时候就显示了,你看我再打一个啊,显示了吧,对吧,就像你在这里构造一个数框上显示那个内容。

然后呢依次按照这个思路来把那个界面写好,就这里了,文件名就显示这个文件名啊,有个for表单,它显示了呢for表单,因为你这里呢要把它数据等下要接收的,你要修改数据嘛,所以这里要把for表达括起来。
等下点确认提交的时候,这里还有一个确定按钮嘛,所以呢就这样一写啊,给大家看一下,把这个删掉,那这里有个for表单,到上述写出文件名,文件内容,文件内容呢他的文件内容是content,就写到这来,对不对。
然后我看一下界面。

那我修改这个咖啡和PPP,你看他也会输出当前文件名是拷贝pp,然后这个文件内容是大文件内容,下面还可以提交按钮,看到没,然后你修改之后点提交,是不是这个操作吧。

EDIT呢是刚才这里输出的这个情况,我把那个输出把它去掉,他这个输出嘛嗯输出跑哪去,哎那个EDIT是哪里输出的,输出这个T把这个先去掉一,那这里呢写好了啊,表单已经写好了,表格写好之后呢,内容是全集的。
是用code传递的,然后我这里呢就来进行一个判断是吧,post的权利嘛,表单写好进去,如果你修改之后,你要提交,我就可以判断,如果对吧,如果判断一下,如果EXCE设置什么DOLF。
提交的什么这个code是吧,有code提交又怎么样呢,就像有人提交在这个表单里面修改,提交就进行什么,for open打开文件,打开哪个文件,打开你这里传递的这个file文件,打开你这里有权利范围。
也就你修改的文件是吧,还写进去,就是这个喷子,所以这样路径绝对路径啊,这里不能写写单个文件,因为它有些可能跨目录传递的,就只有那个文件名,一直加目录V把它文件呢写清楚点啊,斜杠到处采样。
就是目录加上斜杠加上文件名就是完整路径,用这个open打开,然后螺丝W加模式,就是我们做的追加模式写入是吧,然后如何写的,就是for white写入数据,写入什么数据啊。
这个EDIT的这个content的数据,就是这个code结束过来的是吧,这个数据写入哪个数据,然后这里是F接收打开的模式呢,HL这个打开下面的写什么内容呢,文件写入操作哈,就写入这个内容,对不对。
然后呢写完之后呢,就for close,关闭这个BB是吧,打开了这个进程,关闭它,这样操作一下,就是你这里呢如果说你有这个提交这个code值,这code值就是那个文件内容值是吧,你有点提交提交之后呢。
他就会以这个表单上去post发送数据,F型的为空,就发动自己自己呢这里有检测到code,有数据发送,那么进行文件的打开,打开这个什么文件路径,然后把这个新内容介绍的新内容写到这里来,然后再关闭。
是不是这个就是,是检测这个什么这个编辑都提交的那个事件,进行这个文件的重新编入,对不对啊,这个呢就是说编辑之后显示的页面,来显示这个文件名和文件内容,然后一旦有提交事件的话。
就是点提交它就会发这个表单嘛,表单你post提交提交这个参数值,文件内容就是能扣的吧,就是我们修改的代码,然后这里再检测到来,我们试验一下看行不行啊,首先让我们尝试一下。

打开这个,比如说这个嗯code点pp,打开你看这个内容是吧,我写一下啊,123123456好,我现在可以打开这里看一下啊,打个code啊,这是他代码是吧,默认了他现在读到代码,我点一下提交第二题。
压之后看那边改不改,你看这进去了呀,同样的道理,但这里没显示啊,因为它没有刷新,如果说你要显得更完整的话,你要重新剪编辑在这里,那我再写一个提交是吧。

这是我们出来了,是不是要实现这个文件的写入和这个操作了,我就写入编辑就实现了呀,啊只是说我们显示那上面都没有进行刷新是吧。

不能实时的同同步啊,那这个是没办法啊,这个是没办法,这个需要自己再细化代码,那基本上啊,呃这个文件的这个显示文件夹的打开,包括这个文件的这个编辑功能,下载功能,删除功能基本上就理论上是实现了是吧。
你看历史上都是这样实现的,对不对。

功能那就基本上实现了啊,那么现在呢把这些实现之后呢,我们接下来就要思考问题了啊,那我们上这个课程教大家去写东西,既写的不美观也不漂亮,但是为什么要持续去写这个东西呢,是吧。
大家有没有发现就这里在写的时候呢,会有很多类似的安全问题,就拿我们之前说的这个路径。

安全问题就已经造成了,这是当前目录,我这里呢取消这个目录,打开之后它显示任务那样道理,就是我们常说的我两年斜杠诶,他跳上机,我在两年斜杠,他说无效的目录参数,这是我这里的时候那个控制。
你看如果检测到这个路径呢。

不是一个地方的话,就提这个嘛,但是如果说我把这个东西删掉,注释一下,好我注释一下。

打开这个还不能出事啊。

出事直接死在这习惯。

别卡呀,等一下啊,等一下,完了完了,呃票什么是劳动司机突然一下就死了。

点开是点点斜杠啊。

它可以半目录就可以跳跃到三级目录,对不对,那跳上级目录就像说会造成这种目标的,就是我们这里要给再接个盘符,是C盘的这种情况是吧,但是这里呢他有这个限制,这个先知呢就我昨天讲过的。
就说你可以通过这个PPII里面的一个参数,来进行限制是吧,那这种删除限制也可以用这种东西限制,给我加点东西啊,你看啊,代码说我加这个东西就把它固定死,只能看这个目录,就可以在前面加上这个东西的。
那写东西固定open base dr只能是当前目录。

所以这个时候啊,你看啊我在两年斜杠诶,他怎么还是可以啊,诶我写错了地方,妈的我写这个脚本里面去了,关掉这个里面,那现在来你看一下刷新。

那开不了了,你看刚才还能看到,就固定死了,就说我只让你在这个目录下面操作,你只能看这个目录下面的结构翻跳不上去。

是我用这个参数呢就固定了,也可以通过PPII的这个open BCR,这上节课讲过了是吧。

PPIN的这个控制目录也可以控制它,也可以在代码中的实现控制,这个代码中呢就i i set。

其实就等同于你在里面去设置一样的道理,就你这样的设置,那就等于在那个PPIN,你设置一样要控制这个目录好。

这样子呢是一个房子问题,当然同样道理,还有一些房子问题就很简单的道理,像这个下载漏洞下漏洞是吧。

哦我点这个下载呢可以看一下路径。

它路径就是这样子的,你看叫file apr,如果我把这个文件名换是吧,换成一个这个假说目录能够跨越的话,我下个什么C盘的,windows下面的一个文件是不是也可以啊,就把这个目录化,就说我下载其他目录。
就是我现在只看到这个文件,但我可以下载其他文件夹,把文件名改是吧,把这个录音改不是也是下行问题,因为他以这种传参嘛,对不对,好在下载,那同样道理删除也是一样,本身呢,它这个设计是。
只能你去对这个当前目录的文件进行删除啊,我先把这几个都开放它啊。

我先把这几个都开放它,那你想这个删除,我点删除他的文件路径也是这个了。

D i t,那我如果能快目录是不是也是一样道理啊,我给放到商机,然后去删除这个前面的目录目录结构,比如说你只能对这个目录删除的,但这个时候呢我让你删个C盘内容啊,或者三个什么东西。
会把整个源码的所有东西都给删掉,那不就直接东西都全部删了吗。

那这个编辑也是一样道理是吧,其实是他们这里都存在这种控制不当导致的,你原本的时装,他只是对这个文件夹下面的东西来做操作,但这个时候呢他把所有东西都操作了是吧,把你其他盘符。
把你其他磁盘的东西都抄都能操作,那这就造成了什么编辑漏洞,任意文件读取,任意文件删除等等一系列问题,包括这里啊,你看这里是文件删除删除的,除除除去,用这个函数,我们还可以用什么函数啊。
我还能用什么方式删除,我不用函数,我可以用命令删除啊,什么意思啊,你现在是运行在windows服务器,我是可以用命令删除啊,用命令删除文件的CMD命令是怎么删除的。

比如我们这里CMD看一下当前目录啊,我来到C盘改C盘,来大家看一下啊,比如这里有个这个文件,你看啊,我SAMD我DL去删除这个正方向录音,这里这个DC DC d lox嘛,我点DL来删除它。
然后我再DL你看这个文件就没有了是吧,空了这件删了对不对,就是用命令删除。

我这里可以用CMD的调用CMD,怎么调用CMD的pp,里面可以用这个函数system来调用系统命令,怎么调用DL删除什么dollar for file,对不对,来我试一下我这个东西能不能删除它。
你看我这就先创建一个文件来模拟这个删除,比如说我创建一个这个啊,一个一好,我们看一下。

那他有移了是吧,等下我把它点一下删除了,好我们再刷新一下这个页面,111就没了啊,一一没了是也可以删除啊。

这个命令也可以删除啊,但是很简单的道理,你现在用的是system去删除,那么就会造成什么命令执行滥用,那我也重新再搞个再刷新一下。

丢了是吧,好我抓一下这个删除的这个地址是这样写的啊,是这样写的,对不对,然后我把这个一一呢该写上去,然后再加上你们加上我这来B数。

很简单的道理,我们前期不是学过这种命令的执行的地方吗。

我先来到这里啊,给大家演示一下,重新在这里给大家看一下效果啊,我这里写个一点T是吧,TT里面写123啊,然后我现在删除它啊,你看啊DL一点TT,然后呢我再加上一个这个双斜杠,p 1+7=0001。
呀这不是拼啊,这那个你是怎么写的,你看它就会删除文件,并且来执行这个拼命令是吧,然后让我重新再创建一个啊,就是两个命令都可以同时执行是吧,两个命令可以重执行,你看好执行文件也删了,并且命令也执行了。
我是可以这样操作,在它后面显示这个东西。

执行命令的,是执行一个命令呢,对不对,然后呢我可以检测一下,如果他没有回血是吧,我就可以用这个网上这个叫js log来结束了。

没有回旋。

就说你不知道这个命令有没有执行,就是他看不到效果啊,对不对,看看效果,你就可以让他先去带歪一下,就说看下有没有数据能够回血呢,先得到这个玉米粒子,我可怎么操作它,我是这里的话,他删除这个一点PP。
同时呢在进行个拼这个命名地址啊,那如果说他执行了这个删除命令,同时呢又拼了一下这个域名地址,那这边是有回血的,肯定这边就有数据回写吧,那说明这个命令被执行了嘛,对不对,就是说他不会告诉你执行不执行成功。
你不知道他执行执行成功,但是呢你可以通过这个让他主动出来,有数据就是说明他执行了没有数据没有执行,所以你就知道这个情况了是吧,我可运行下来和执行好,这里刷新一下,哎没有就说明没有执行。
没有执行的原因是什么呢,并不是说这个命令没有啊,而是因为它有检测无效的文件路径参数。

是因为这里呢我写了检测啊啊有这个提示,如果说我不这样子判断这个路径呢,我判断这个传奇的喷子呢,是不是目录我有检测啊。

就说你这里不是这个文件名,后面还写了这种东西,所以它不是个目录了,导致他有这个提示能理解吧。

那如果说我不写这个过滤的话啊,我不写这个过滤不判断,或者说我直接判断之后呢,我啥都不干是吧,我就随便就就给个体一次,我就写个字吧,我我只会吃西瓜,对不对,我就不搞这种过滤了,我就直接就说你不是。
那我就提示一下,我啥都不干,我就吃点西瓜。

对不对,那这个时候呢你把那个命令,再看一下啊,我们来刷新一下这个单线目录有,然后呢,我在,怎么又卡了,好这里啊,删除文件,把这个点击一下这个路径地址,路径地址呢后面呢加上刚才那个拼对啊。
我就只提示一个那个我只吃西瓜,只会吃西瓜,我啥都不干就行。

嗯哼哼,删除是不是改错了第一方了,又删除绑一下啊,啊那个MV,我看看是哪里有问题啊。

那我只会71卦,其实我只会吃西瓜啊,我重新刷新一下这个路径,看它显示什么东西,哎这是我自己呢把自己写死了啊,到时候你们的执行成功,但实际上呢这里呢就是这么个思路啊。
就是说你在使用这种不同的操作流程的时候呢,他就会有这样的问题。

对吧,你只要这个操作上来的话。

它会有这样的问题,我怀疑这个百分号的一些问题啊,我给他输出一下,先看看角色是什么值,这太卡了,这里面有什么毛,是这样卡,哎你看有了啊,有了,刚才不知道啥情况,刚才一直有没有溜了,看到没。
echo输出胡安米当然也行。

对吧对吧,一样道理啊,这个不行的啊,你这个敲这样的东西不行的,windows cmd命令没有这个东西在那上面才有,它只会输出,执行的结果呢,这个windows不支持LINUX才有这个斜杠,才是命令啊。
这个不管它是前面讲过的啊,这个后面再讲的时候再说啊是吧。

所以说呀这个东西呢就大家要明白啊。

要明白这个操作流程,也就是说你用到不同的东西,就会造成不一样的东西,你如果说这个命令删除的时候,你用的命令用我们的系统命令去删除,你控制不好就会造成命令执行漏洞,对不对,所以也就是说说了这么多呢。
都好理解了,你只要记住我们说的几句话是吧,这个漏洞呢它是由这两个东西决定的,一个呢就是我们说的这个使用的函数,决定什么漏洞性质,使用的这个变量的控制不好的,导致呢可以随便控制这个执行流程。
就像这里啊file正常来讲只是个文件名啊,你这里呢换了一些其他东西,那就会造成一些不一样的事情发生,而你用的unique呢只是造成了文件删除,那你用system来进行文件命令删删除的话。
那可能就不单单是文件删除了呗,还可以执行任意命令,拿自己的命令呢,就像我们诸儒的,让他上前跟后门呢,让他反弹个笑啊,对不对,这都不在话下了啊,所以那就是关于漏洞的方面的利用,那不是我们现在讲的。
现在呢就是从开发的角度呢去看待,这些容易出现安全问题,那么截止目前呢,这个PP的开发已经上了四次直播了。

我们上了几个模块呢,给大家看一下关于验证身份的一个问题,叫什么cookie session的这个安全问题,后台的模块留言板造成的,什么夸张的那种问题是吧,自愿下载,就是你讲的是文件的这个包含哪下载呀。
啊文件的这个上传呀是吧,都是一些安全理由,我们后面不是要上什么文件上传漏洞啊,什么下载漏洞啊,啊包含漏洞啊,这都是这个开发里面刚才给大家看到过了。

是吧啊,我也包含这十几P里面四个函数是吧。

那文件商传他这种架构体系造成的不同,安全问题,过滤机制造成安全问题,要说的话,要归结起来的话还是比较麻烦的,事情就很简单的,你像这个他有这四种过滤,那我想问一下,如果我用云产品。
我如果用人产品去开发这个文件上去,这个过滤有没有必要写啊,问一下大家,我看大家学的好不好啊,那我们把这个文件管理那个东西整一下,那我现在呢就说我用这个OS去存储文件上传,我写这个过滤和写不写有没有影响。
所以我写了他就会过滤吗,还是说我写不写他都过滤还是什么意思,对啊大家说的非常好,都说这个不需要写,因为写和不写都没有任何卵用,为什么你这个血是针对于,因为第一种情况就是。
因为你自己的服务器呢是解析这个文件的。

什么叫解析呢,就为什么我的pp文件我放在我这里运行,它能运行出来。

我把这个pp文件呢我放到我那个OS里面去,它能运行吗,他啥都不是,那不行,我给你试一下呢,我这里的商圈的文件上去是吧。

啊我就不删了,懒得搞了啊,就说你这里呢你把上下这里去的话。

你这个地址呢你去访问,它只是一个存储,那打开就下载,打开就是里面的就是下载啥都没有。

如果是文本打开就显示,那你pp文件或是什么其他后面文件也是一样,道理啊,打开就下载啊。

那这个文件直都不自信,后面就没有任何卵用,所以说你过不过滤有什么意义呢,你过滤又怎么样呢,他不就让他上上去,上上去也没用,上上去也啥都不能干,再说退1万步,他即使能解析和理解没关系啊。
为什么能解析你的网站呢,你的网站叫3W小于八点com,而他这里上传上去的路径是什么,是这个OS的路径,这个商家这OSS的这个网站,和你有什么关系呢,就像说你的文件和你的网站源码,是两个单独的存在。
文件上传文件都放到这个域名上面,网址源码那是另外一个域名,他这个目的呢我就拿一推万步来讲,他解析了,那么他也是看到这个文物矿炸弹,和你有什么关系的,没关系啊,就很简单的道理是。
还有一种情况就是我们说的第三种情况诶,他把这个稳着呢上传到其他域上面,就很简单,你的网格是三刀点小点八点com,对不对,我举个例子啊,如来,这三大问题小的八点com对不对。
哎他一上传了里面的网站路径变成了r load,也下了八点钟上传到这个上面去了,那这个呢广州呢啥都不干,就是存储文件的,你上去之后就是一些文件啥都没有网,没有网站源码,也没有网站源码的一些信息文件。
他也可以这样设计啊,对不对,所以说这个商场安全问题呢,它有三种架构啊,一种架构就是说云产品上面,还有人就说上面其他域名,那其他域名呢就是也和这个OS差不多的,只是说它解析而已对吧。
可能解析你上传个PP的访问,它能解析,但是你解析又怎么样呢,上传上去那里面就是文件啥都没有,就是上传一些乱七八糟的什么图片啊,格式啊,啥都没有了,其他文件敏感文件他都不放上去,数据库也不在上面。
就是别的商圈那些文件啊没没了,除非是第一种是吧,他自己上传到自己服务器的,这个什么磁盘上去了,就是和源码呢,就是像素和源码都在一起了啊,让他在一起的缝隙,对不对,那这就有对不对。
所以说你们把这些东西都搞清楚,就知道你要维护他,或者要变得更安全,其实是非常好做的,用最好的技术,用最好的,这个架构理念就能把一些安全漏洞的封杀掉,就是说有没有安全的东西,你都没没私心了。
你让他上上了也得不到啥东西,啥都没有,脚本上上去又怎么样呢,不让他执行脚本也是个死的,还有很多啊,还要从什么目录权限里面去锁,然后他上很多我们思想很多种方案啊,就是从这个防护角度来讲的话。
同样道理呢这个防火墙都让我们明白之后呢,也是可以从工具上面去分析,哪些工具有效,哪些工具没效啊,这里呢就是说如何判定,是不是上传这个资源上面去呢,如果判定是不是其他域名呢,很简单啊。
一般在上传文件上传完之后,他可以他会给你一个路径,那个路径呢你可以直接通过那个路径呢,又要地址来去判断的,如果是上下在一起,那网站呢就和那个路径的域名是一模一样的,如果出现这种情况。
是你网站的是3W点哎,跑了变成一个什么logo,一个地址出来了,那不好意思,恭喜你啊,上传到其他地方去了,那这个其他地方就和你现在测试这个网站,可能关系不大了啊,它只是一个存储的,如果是像这个OS域名。
就像我们这里看到这种,那么这个阿里云的啊,或者是腾讯人的是吧,这种有的域名,那也恭喜你啊,上到别人的OS里面去了,那你就只能是找这个OS的这种泄露K呢,来尝试方式啊,同样道理啊,像这个什么文件下载呀。
啊其他的一些东西呢我们就不再累赘了啊,我们只是说从这个开发里面呢给大家来说一下,避免是吧,有些人呢就扔地,我要你上安全课程,你这里面的讲开发讲的呢听还听不懂,有什么意义啊,意义可大了啊。
就像我们每次课讲的时候都要重复的一句话,你只有把这个开发的一个理念呢学好之后呢,你就能站在这个程序员的角度,看待这个漏洞问题,这个漏洞是为什么产生的,其实呢说白了就是这个程序员呢,他自己的技术造成的啊。
就是他的不是说技术啊,程序员呢,因为即使它会开发技术很好,也不一定代表他开发的就安全,主要就是和这个程序员他自身的安全,这个意思就是他如果懂安全,那么就安全,他不懂安全,他乱写,他不管,那不好意思。
那里没人安全,一大堆安全漏洞就一大堆了,对啊这是从漏洞程序来讲啊,好今天的内容就讲这么多,那么下节课呢,我们就讲这个PP的这个新闻列表和模块,应用两个啊,这个呢就会涉及到RCE的代码执行漏洞等等。
就RCE的一些什么代码执行漏洞,就和这些模板相关,我们把这个案案例演示,就是从这个网站的正常功能上面来,把这个漏洞要体现出来,大家就知道了啊,为什么漏洞呢,有些网站有哪些漏洞,有些网站没有漏洞。
就是因为你用到哪些功能,就会有哪些安全隐患,你不用就不会有这个安全隐患,简单单一漏洞就少,那复杂完美就会有漏洞,就是很简单,一个程序越复杂,它漏洞出现的可能性就越大,就因为他用了大量的东西。
那么只要有一个地方控制不了,那就有了啊,简单的话就一格是吧,单纯的功能,那漏洞出现的几率就小,这都是一个很好理解的一句话啊,你功能越多,你涉及的比较多,那总会有一些遗漏的地方,就会出现安全问题。
控制不好就容易出现,控制的好,那就不出现,好我们从这些app开发里面的,什么我后台的什么认证啊,留言板啊,什么文件下载上传呀,都是和一些漏洞相关的一些功能值吧,包括这个新闻管理啊,什么模块引用优惠。
有一两个漏洞呢会和它相关是吧啊,框架开发的就是语言本身的漏洞,漏洞呢产生在开发者的这个函数,使用和过滤不严啊,也会和这个语言的这种是吧,选择性和第三方组件也有关系,方方面面的。
你只要把这个思路呢记在自己的脑海中,把课程呢把它吸收掉,那么整个的一些漏洞的产生和条件,都会在你脑海中那样子呢,你对漏洞有个大致的了解,你也知道这个碰上不同的目标是吧,会有哪些不一样的思路。
哪些东西呢该放弃,哪些东西呢就可以深入啊,从开发呢去认识漏洞,这就是我们这个安全开发的意义啊,为什么讲的原因啊,不是让大家去学开发啊,而是通过这个开发呢,去思考这个漏洞的产生的方方面面。
这才是我们的核心,所以这个漏洞这个开发里面有很多,我没有讲好的,或者说有哪些这个你不懂的,这个关系也不大啊,你可以慢慢补,主要就是了解啊,包括这个后面呢我马上要这个pp讲完之后,还有什么JS的是吧。
还有这个什么java的,你看今天我们不演示这个呢这个页面的JS呢。

这个源代码是吧,他用JS写的上传诶,他写的不好,导致这个上传的时候呢泄露这个什么K是吧,那泄露这个K诶,你不就可以利用了吗,所以说啊很多型的都这样的啊。

那么后续呢再讲的时候啊,这个代码写的不明白啊,界面不美观,那不是我们担心的啊,这个能力在这里啊,我也不是个专业讲开发的,大家见谅见谅啊,大概功能实现就行啊,啊今天就讲这么多了啊,大家有问题就问。

没问题,我们就瞎了啊。

后天再上pp的pp,还有两开放,还有两次直播,讲完之后呢,就讲JS了,源码呢,等下给大家罚吧,这个源码我今天还没有打到,原来一个月还没找到工资怎么办,哎呀,你真是想太多了。


P26:第26天-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全 - 逆风微笑的代码狗 - BV1Mx4y1q7Ny
试下这个安全开发pp这个应用的啊,第五次直播了吧。

啊这一课讲完之后呢,还有接PPP都没有了啊,啊最后倒数第二节啊,今天讲的是这个模板应用和新闻列表的一个混,混合调用啊,其实新闻列表呢是一个简单的一个数据库查询,那显示新闻的一个非常简单操作。
这个在前期什么留言板项目里面,如果做出来之后,这这个东西,那就是无非就是啊一模一样的东西啊,所以比较简单,那么这个模板应用那就是个全新的概念,这个概念呢会给我们后期这个漏洞的利用和。
漏洞的产生呢有很大的提示啊,有很大的这个警示,所以说还是值得听一下的,呃,那么现在呢我们来简单说一下,今天要讲的知识点啊,就是讲一个这个新闻列表和模板,那么讲讲之前呢,我们先把这个新闻列表呢给它弄出来。
弄出来之后我们再来说这个模板啊,这个模板呢,我们从它的一个应用方面的一个意义,再从它的应用方面的一个案例,再从应用方面的一个安全问题三个方面的去讲,它就是先要知道为什么要用模板,再呢再怎么用模板。
最后呢再就是这个模板会带来哪些安全问题,这就是我们的核心终点啊,首先呢我们来先来设计一下,这个新闻列表的一个功能,实现新闻列表呢就是说很简单的道理,就是我们打开一个网站呢,它会有个这个可以看新闻呐。
看这些文章的是吧,这么一个操作,那么这个操作是怎么实现的,也是非常简单的,它的步骤呢其实和那个留言板项目呢比较相似,首先在数据库里面呢,去创建这个新闻的数据存储,然后呢在从代码中呢去选择连接数据库。
把新闻呢给他读出来,读出来之后呢,页面呢进行这个显示,我们先完成这个项目,再然后呢再去写这个模板啊。

好,那么现在呢我们就把这个新闻,这个东西呢给弄出来。

嘶好打开那个,多梦领域好,在这里呢我们创建一个文件名字,那就叫new点pp好,那这里呢在写代码之前。

先把我们的这个数据库啊给他搂起来。

然后呢创建点新闻进去啊。

好我们打开这个库啊,然后这里呢有一个这个几个东西是吧,然后在这创建一个这个表表呢,好第一个呢我就模拟这个的一个设置呢,来给大家创建啊,就这里起个名字吧,啊首先第一个啊我们就取名叫这个艾迪是吧。
就它编号长度呢搞个十位就够了啊,然后不能为,当然后这里为一个减值,为他为这个E然后这里调自动递增,把这个选上,就是说呃你写一行一,那么下面就是自动为R就这个意思啊,好再加第二个。
第二个呢我们就搞一个这个标题,TRTLE是吧,标题好,非char类型不能为空好,只需再就是这个content内容啊,这个类型呢我们就搞成这个特殊类型,这个一因为只有255个是一个珠串类型。
我们要搞成一个这个test类型,搞成个test类型啊,那么这个长度了就不限制了啊,好再来了,继续往下,那么再来搞个图片image是吧,图片好,这样子搞完之后呢,就是说这里头有新闻标题,新闻的这个内容来。
然后呢图片好,当然了,你这里还可以写个桌子是吧,我们可以写个桌子AUTHOR啊,也可以写个桌子啊,我们可以往那这个呢,把这里呢取代一下标题,这里去掉,然后这里是位置移动一下啊,位置移动一下。
好来点击一下保存,再来取个名字,名字那就叫new啊,新闻的意思六好,那这里呢就是表创建好了,然后我们在这里呢可以自己呢先写个数进去,比如说id为一的标题为这个小迪安全培训是吧,桌子呢小迪。
内容呢我们就随便呢是吧。

写短内容录取啊。

是吧,这个数据下来,是吧,就放到这里边啊,然后imagine那就搞个图片,就是当前目录叫image,就叫这个image,我们之前写了一个路径嘛,这个项目里面是有个路径啊,那个image下面啊。
这就这个下面要给一个图片吧。

就给个这个培训的图片啊,把它保存一份到桌面。

然后呢就叫这个小区的PN机吧,好然后呢在这里呢就把这个这里写上一个image。

刚小李点提升机是吧,写上这个内容啊,就加里面写一个数据啊。

就是写个数据进去,然后呢在image这里呢把那个图片呢给他拉进来,拉到这来好吸纳,那么现在呢就是来读取这个新闻呃,首先呢我们数据库的配置呢,已经给大家写好了啊,就是enclose啊。
包含这个CONFIG啊,啊写好之后呢,这里呢就调用SQL语句来去把它执行一下哈,SQL语句,那就snack for嗯,然后new,然后while条件是while id等于变量id。
那么这个变量id该怎么去写它呢,对不对,我们可以在这里呢就写上一些,这个叫什么变量id呢,就等于dolf get,传递过来的那个什么参数值为ID是吧,也叫参数名,然后呢后面写上嗡嗡是吧,如果他没有传参。
我们就默认为他为移这么个设置方式,设置好之后呢,就用这个之前写好的这个mysql acquire,来去执行这个co n下面的这个链接啊,CN呢就是我们那个包含文件里面那个点击,然后来执行这个SQL语句。
将语句呢进行一个执行赋值为data,再用之前留言版的那个什么查询是吧,这个前面讲的内,当中用这个东西取出他的数据是吧,这个相信大家都知道了啊,用这个东西取出来的数据,取中的取取出一个数据。
然后呢取出的数据呢我们来给看一下,比如说输出一个这个RW第一行。

那么他这里取出数据的话,零行就是这个id为一的,那我再取出标题为一。

对不对,标题为一,再输出这个为order是吧。

这个桌子。

那么依此啊,我们来看一下是不是这个信息啊,三和四,一直输出这几个数据,然后在输出的时候呢加上个点啊,让他换个行看一下啊,这样子来避免这个显示不好,对不对,我们来写上去啊,好那么试着一下啊。
这样子呢我们就写好了。

简单来说就是这里查数据,我们来可以看一下这里的一个结果,那你看是不是小力SERC,小力SEC是吧,作者这个是标题,这个是作者,然后这个呢是我们的内容,这个是图片类型,然后在这里呢。

是不是我们要把它显示的更加美好,比如说我们这里呢标题我就可以把它怎么样呢,这样去写是吧,这样去写怎么写呢,看一下啊,可以啦,用这个标签是吧,Title,然后呢点连接这个什么这个标题,然后再连接什么。
你这个杠就是在页面中呢,让他去执行这个ATM代码是吧。

好这样写呢,你看啊他的标题呢就编了,编成了这个什么。

你看啊源代码,你看标题里面就有这个什么这个东西了是吧。

写进去了,然后呢依此啊,这里图片的话我们就用个image图标了,给它显示,写上个ATM代码输出的时候就把ATM代码执行是吧,SRC等于什么,这个变量值把写进去就等于这个变量值,对不对。
然后呢连上去之后啊,再来再来一起结束对吧,结束它好,我们来看一下这里的一个结果啊,image等于这个值,嗯那这里呢就是把这个值呢给大家写上去。

好我们来刷新一下。

哎这里报错了,哪一行有问题啊,看一下为,SRC地址嗯,这里不用写这个东西应该也可以啊,唉这写不写都无所谓的啦,你们说是个单引号问题,哎呀也怎么说呢,啧啧,哎我写这个吧,好这样子吧,应该可以了,那是吧。
图片就显示了,你看就是这张图片呢是在这个ATM代码里面,那我能把它显示出来,呃如果你想加的话,你还可以加上这个什么长度,比如说等于1000是吧,啊宽度这个东西能设你3000啊,对对那你看现在就正常。
你看怎么显示是吧,但这里呢大家一看就说,这是能够读取新闻的是吧,有新闻的哎,但是这里呢很清楚啊,呃你在里面欧号加上id是吧,那写就算你不加它也会默认人一加id呢。
它也等于这个id1你看这是我们说的这个标题,还有这个什么桌子老的新闻,他的文章内容。

但是里面涉及到的图片是这么一个流程是吧,因功能已经实现了,但是这里呢是缺点意思的,缺什么意思呢,就说我如果对这个每一个这个东西。

就说很简单啊,别人看新闻就是拿个正常网站,你看我的网站,那这是它的标题唉,然后呢是吧啊,有桌子,然后呢里面呢显示的也是这么美好,就说不像是我这种哎就这个光秃秃的是吧,你也不知道哪个是什么标题。
哪个是作者,哪一个是文章,哪个是图片,看上去呢就不太美观,所以为了解决这个美观性问题呢。

那你就要在这个什么输出的时候呢,加上这种HM东西,让他解析执行就很简单,比如我这里啊,我就告诉他是吧,这是这个标题,对不对,告诉他这是标题,然后呢你在显示的时候呢,他要做标题。
但这样子的显示呢依旧还是差,所以说就会引用很多的一些ATM代码呢,对这个显示页面来进行这个美化和样式的设计,那么这个模板技术就由此诞生,什么叫模板技术呢,来现在呢我们就给大家看个例子啊。
首先我们先创建一个文件,文件叫做什么名字呢,就叫一个选择一个HTML文件名字就叫new点ATM,选择这个ATM呢之后啊,比如说这里有个标题是吧,我就可以把这里呢把它括起来,比如说这里把括起来。
然后你看啊,我这里写好之后,接下来我怎么办呢,我用这里呢去写一串代码,去写什么代码,写什么代码啊,比如说我叫dollar f t e m p l a t e变量,就叫模板的一个意思。
然后file get tas得读到一个文件,读到什么文件,读了一个叫new,就读这个文件的内容,这个上节课讲过这个变量啊,读这个内容把它复制给他,然后呢怎么操作呢,啊大家看一下。
这里呢他在输出这个标题的时候是吧,标题的时候是等于这个RWE的啊,然后我们现在呢就做个什么事情呢,把这个阿拉丁取出来之后啊,做个什么事情啊,就做个这个事情啊,你看啊就是把这个2W呢给它进行一个切。
等于s t r reprice,就是个替换,替换什么呢,第一个值搜索什么东西,搜索dollar for title,然后把它替换成什么呢,替换成变量,这里呢我给它赋值,就这个值啊,把取出来啊。
变换Z替换成这个,然后呢替换对象就是这个TMT,然后再用这个EFEL了来执行刚才的这个东西,把它进行执行好,我们现在来观察一下访问。

唉还是还是这样子啊,然后呢,你这个好像是没有执行啊。

这里要写个这东西,把这个项目打开一下,大概看一下啊,那你看之前的是这个名字的,你看上面的名称是这个东西,然后上面变成个title,你看这个title变了是吧,我刚才那换的时候呢。

这个大写应该是有一个大写的原因造成的,现在呢你看代码里面呢,代码里面就自动编了,你看这里有个叫小迪安全培训,就写到这个title里面去了。

那效率的安全培训就写到菜里去,那其实呢就是说我写一个这种显示美好的界面,在这里我去替换里面的值,然后这个值呢就会随着这里去更改,能理解吗,就会随着这里去更改,它就说我这里。
那就是相当于说这里呢会随着这个变量,这里啊就很简单啊,这里他不是要显示标题吗,我就让他去解析这个什么NEOS,解析这个6S对不对,那么呢他去把它进行解析之后呢,把已经替换替换成这个变量。
那么也就是这个这个地方呢就相当于变成什么,就变成那个这个变量值了,所以啊我设计好的这个美好的页面,就写到这个news里面,然后呢啊去解析它的时候呢,去访问的时候呢,就让这个美好的页面呢去依次去替换。
我对应的变量的地方,就比如说标题这里我要写什么啊,然后呢界面写这里啊,你可能说啊这讲跟没讲一样啊,那么我们可以给大家看一下一个成品啊,给大家看一下个成品,首先呢这个页面我们这里呢准备好了啊。

来把它复制出来,这个页面的一个美观程度呢,我先给大家看一下,这个页面呢不不是我教大家写的啊,是网上随便找的。

这个页面呢就是前端页面,我们给它搞出来来,比如说我把页面这里删,看着啊,这个页面是个什么样子,先给大家看一下界面,这是我们在网上找的一个界面呢。

这是框架啊,这里呢有首先这里呢上面这人是标题,这里是文章标题,这是文章的一个说明,作者啊,内内容和他图片这三个地方啊,现在分别显示是teng title和handy。

什么这个东西啊,你看一下啊,那就是这个记这个代码的显示啊,这是他设计出来的啊,这是标题,然后呢这里有这个他的这个主标题,然后呢几个这个索引是吧,首页新闻什么留言,然后这里呢再有这个什么啊。
真文在是这个什么图片的地方,我们就一次去替换这几个值,我们就依次去替换这几个值,怎么替换它呢,大家看着啊,首先标题这里替换成东西,然后替换哪里呢,就替换这个代码中的60点TM的第一个。
这里的先替换在标题为这里,把替换它寻找这个值,把替换成这个值对吧好,然后呢以此啊去替换几个地方,再来寻找第二个地方,把这个ATM代码里面的这个handy,大喜欢把替换成我们的。

这里不是有这个一个是title吗,编程然后这个是桌子,然后是内容是吧。

嘶哎这有点不对应啊,他这里有五个替换的,一个是这个,另一个是这个,然后这个这个这个有五个啊,那我就用这个数据库的吧。

用这个DOMO的来用这个DOM数据库的啊,啊这里有五个来看,这有五个啊,这里有五个,你看对应上了啊,就多加一个这这个东西啊,因为他有五个替换的查询五个这个变量啊,有四个啊。
然后你看啊有五个来image的,还有个这个content的死的,那有五个我们依次替换,这里呢这是标题为第一个新闻,第二个呢是handle手头为效力培训开课了,然后第三个呢就是这个小题的这个主标题啊。
这个是主标题,这个内副标题,然后这个呢是内容,这是一张图片啊,是这么一个啊格式啊,就说你等一下呢你设计表的时候。

那就这样去设计它也行啊,然后这是多么数据库,所以我这里要把这个connection呢改一下,改成个demo数据库就可以了。

或者那我就重新设置一下个表啊,我重新设置也行啊,重新设置一个啊,这个是60,我重新在这里重新设置一个吧,我就不改了啊,重新塞这个,把这个删掉,重新塞这个啊,他的有些人呐,我绕着绕着他又不懂了。
我就重新从从这里重新塞一个和他对应上啊,id的我就搞快一点了啊。

然后第二个字那就去,取这个,取这里面的几个啊,就搞一样的名字吧,第一个这个,好,然后第二个是,第二个变量呢和他的名字再搞一样的话。

好记一点啊,你也可以不搞一样,这个无所谓的啊,这个无所谓的。

啊这个呢在搞。

嗯然后呢继续,这是看他的思。

对吧,卡特斯中文,然后再就是这个对应的image。

中文在那搞test类型啊,test类型,这个就不限长度,然后image,好保存一下,名字就叫LUIS,好然后呢打开六四在里面呢去写一个新闻,i id以标题为这标题啊,这个标题为小李安全博客啊,主标题。
我们这个小题培训开课了是吧,好这个呢就是我们说的是这个信息,然后就是内容,内容呢,我们就还是按照这个刚才来,随便的选取一部分好图片,地址呢也是那个图片地址吧,Image,然后是这个小节点。
TNG这个内容呢就干2023杠一开了,好保存一下好。

那么现在呢我们就把这里呢给大家看一下,效果了啊,呃来到这个JS代码这里啊,然后这里呢就60嘛,就改成60,刚才是60嘛哈然后呢输出的时候呢,第一个啊,这个地方呢就替换这里的第一个变量值。
第二个地方呢就切换第二个变量值,第三个地方就是我们这里说的第三个,这个吧,嗯一个两个四个就可以了啊,然后这个是和这个四个就可以了,然后是content的,对吧,把它写进去,写进去之后呢,还有个吧。
还有个是那个image,对不对,还有个image image呢也要替换,然后就是这里的显示的哎,怎么关了呀,640来,还有就是这里呢这里不是有个这个这个标签吗,把替换成那个什么我们的图片那个地址啊。
把替换成这个这个第三个,这是第四个,这是第五个,把意思替换,替换完之后呢,啊把它一执行执行,就是用那个EFEL变量呢把它进行执行啊,就这里写一下就可以了,那我们来试验一下啊,看结果啊,现在看一下啊。
看下界面啊,额会有什么不一样的,然后把这里的尾巴全部去掉了,这里不用了啊,这里不用了,因为这个输出呢是等同于没有的。

就是把它取出来,这个值就可以了,勾好大家呢,现在呢这边是显示的是一个空白页面。

额,啥都没有是吧,这出了什么问题呢,这出什么问题呢,我们先把这几个地方呢给大家复制一下啊,先复制一下,首先这个第一个变量,把它复制一下吧,我们先确定一下是哪里的问题啊,然后用这个变量取代它,第三个。
第四个,先把这个东西都写好,这第三个第二个,第四个,第五个好,取出来之后呢,我们先输出一下。

看看能不能输出,看看是不是我数据库连接的问题,连接一下看下啊,输出能输出小李博客。

那就没问题啊,那么这里呢他就是对应商,那这是他第一个小的安全博客,他能输出就说明数据查询没问题,那我们检测一下,先是不下没问题啊,然后依次把这个地方法替换一下,因为它上面赋值,好诶,第三个是这个。
这个是看他是第四部分,这个是这个image,好那是哪里有问题呢,啊我们看看那输出你看正常了吧,你看现在正常了吧,刚才那个不行啊,你看现在正常了吧。

你看你看这个页面模板,我们打开看一下来是吧,他就按照这个模型,你看你看标题呢就变成小李安全博客上面,你看这个标题呢,我鼠标呢变成小量安全博客自动替换。

用那个模板呃,你这里呢就打开这个页面的时候啊,打开这个页面的时候。

这个ATM代码的时候,你打开这个页面,那它就这样子,然后呢你打开这个PB代码,你看它自动替换了,那是吧,就是呢这里呢就显示主标题和副标题,包括你的征文啊,图片显示,对不对,从数据库里面查到数据。
再显示这个为什么要这样做,是什么情况呢,我们举个很简单的例子来,比如说就拿我们自己博客来想,你想象下啊,我点击一个新闻,是吧,里面这里有私信息,然后呢我换一个新闻再点哎。
他这个显示呢和刚才这个东西呢是一模一样的,一个框架,上面是标题,下面是内容,对不对,都是这么个显示模式啊,然后下面是这个什么发评论,那你想想你每写一个页面,你都要把这个ATM的这个模板把它重写一遍吗。

就不是我们之前原版的时候,在这里去把它输出的时候,我难道对每一个页面显示东西,我加上东西吗,就是我提前呢先把这个模板呢把它构造好,比如说这里面有哪几个地方要进行替换的,我就把取得值意思去替换这里。
然后这个叫60是负责新闻的,然后我再取个名字,比如我叫个什么呢,加个invest对吧,那么这个就是负责显示首页的,然后这个呢负责显示新闻的,就是很简单的道理。

看新闻的就是一个大概的模板,然后呢你看不同的地方就很简单,比如说我在那点框架的啊,它就是这么个图片显示模型,然后呢你看新闻的点进去,那这是看我们框架的这个什么列表是吧,新闻的这个呃导航的。
然后呢你点新闻进去呢,哎它就是这么一个ATM页面。

其实就是说他就是把这个东西呢作为分工了,这就是符合我们后面马上框架开发要讲到的。

一个叫标题里面写的FMFC模型,FMC模型啥意思呢。

就是这个非呢代表value视图,我们这个ATM文件呢它就是专门做视图的,就是显示操作的显示的样式,然后里面要改变的值就类似于这种把它写好,然后呢你在pp代码中呢去把它进行是吧替换。
那么意思就是说在解析这个index文件的时候,去把它进行解析的时候呢,他就会按照这个逻辑,就像这里的页面,那就被替换掉了,然后呢你在显示这个页面的时候呢,哎就和我们的显示一样。
其实它就是一个ATM呢和pp的混编,只是我们传统混编呢就是在pp代码这里是吧,比如说我这里呢很简单的道理,我输出个echo是吧,输出个这个这个什么BR就换行是吧,我这样的输出呢我就这样写很麻烦。
然后呢我提前把这个页面写好,那么一次呢,在这里啊,比如说这里输出个变量啊,写个变量是吧,写个变量叫这个东西,对不对。

我正常来讲我要是这样去写,然后呢你显显示页面的时候,哎他就这样去写对吧。

你看他这样这样去写,对不对,然后呢你之前呢是这么个思路去这样写。

那么现在有这个东西之后呢,那你看它就显示这两个的话。

你看只显示两个啊,你不可能每次呢你要保证是吧,每对对每个东西的显示呢都用ATM来呢,再再把它重复搞一遍,所以提前准备好,那这个呢就是news,那么index呢就负责显示首页的那个模板。
所以这个网站的美观性呢就加大了很多,这个我这样一说,大家就知道这个模板的应用价值了是吧,我们先搞清楚为什么要用模板,先要知道它这个东西的由来,不是说你妹的是我凭空乱造出来一个东西,就是网站开发呢。
是为了保证这个界面的美观度和这个效率,它就会使用这个模板,把这个模板呢准备好之后啊,依次呢去对这个模板里面的这些东西呢,进行这个操作,于是呢就是相当于说啊在操作的时候呢,只需要对这几个地方呢进行替换。
那么页面呢就是按照你这个写好的样式呢,去显示是这么一个东西啊,所以这就是为什么要使用模板,保证效率和开发的简易程度,然后呢,这个程度那就符合于MFC的那个开发模型,就是我们开发角度一个思路啊。
这里让我也看一下啊,这个是一个z blog的博客,你看我们可以看一下啊,这个是一个z blog的博客,就是我们前期在网上下载好的成品源码,我们也看一下这个pp开发的源码里面,他有没有使用到模板技术呢。
你可以看一下啊,你比如说呢像他这里呢。

我们可以打开这个网站给大家先看一下,那这是我们妲己那个贼blog的原本网站是吧,那他原本还没有换任何东西呢,这三个结构是吧,来这里是它的结构显示写出来的一个结构好,你看下它的源码里面啊。
你比如说呢我点这个呢,点这个值,它就有这个页面显示啊。

那这个东西是来自于哪里呢,你看一下啊,看他加狗,你看这里一般找这种模板,一般就是哪种名字呢,你不知道架构,你就找名字,那你看这里有个默认的,我们打开看呢,这里呢有个模板,然后这里有个什么。
你看啊有几个pp文件,你给pp文件也可以加A加文件,你看呢首页的handle的头部,finder的尾部,打开finder,你看里面是不是有这么难。
你看pm by z blog p p a tml common screen。

那你看这个尾部呢是这两个东西啊。

你看你看啊,一旦我把这里一改,你看我改成个X。

我刷新一下页面,嗯你怎么不动啊,哎你不要让我难看呀。

不要搞我啊,呃这个改了之后没反应,告诉大家是什么情况啊。

是什么情况呢,大家觉得是什么情况,你肯定觉得我又翻车了。

我告诉你很多东西翻车不是我的,主要的不是这个情况,它可能这里你看有几个目录,大家可以关注一下啊,来它有几个目录来叫d f o s TP u r e writer,Peng zi t。
可能就是说他这里呢就换了东西,就可能用到是这个zi it的模板,这个是你是说不准的,你不信的话,我给给看一下啊,我全局搜索这个文件,然后我把这里面的每一个东西,我都把它改一下啊,都把它改一下。
因为我不确定是哪一个知道吧,这不是叫翻车,不要什么东西,我一出错就是翻车,有些东西是因为你不还,你没有去确定它,你不知道他是哪一个地方,它里面有很多模板。

就是你登录后台之后呢,你就能看到他用的是哪个模板,就是哪个文件夹,它里面有多个,你知道吧。

呃我可以了,把这个地方呢显示一下,这个是by,还有这个地方的啊,这几个地方都改一下啊,Foot hunter,还有首页的啊,你看首页的啊,这个是首页的,我不改这个我改首页总行了吧,你看啊。
首页里面不是有一些这种名字吗,对吧,我加个乙好吧,你看啊,这个是改这个TP的,我加个乙,我再改,这个默认的,应该是在这个默认里面加个首页的这个模板,这个首页的模板我加个一好吧,那我写个东西来保存一下啊。
我把这个网站重启一下,先把停止,然后再把它重启。

好我们来刷新一下这个网站啊,额有可能是没有刷新的问题。

我们来看一下,重新刷新,我是额外呢要多给你去讲这东西,嘿嘿我翻车。

我都是有病,对不对,看一下啊,这里的源码里面看一下。

嗯这看来是我小看他了啊,这个上面没有看到这个移移的一个显示。

看来不是在这个里面。

我把那个模板给他登录一下后台。

来把模板里面都修改吧,我也不知道是哪个了啊,也不知道是个DEF的还是哪个,都修改了吧,妈的,是Z是哪个是AJ啊,你们说,哎是哪个是这个吗,把这个试一下,这个也不香啊,这个这个不香啊。
这个OS里面东西都还没生成呢,应该是这个吗,这个也改了呀,white zi t的,好都打都备注下啊,再来看一下。

还是没有改啊,那只能说我找子错了地方,呃我把那个地方全去搜索一下吧,我不搞出来。

我不行啊,不能被大家小看,老说我翻车翻车,我直接全局搜索,我把所有能看到的都改,我看确定是哪一个,一个地方这个地方没改,强制改了,估计是这个应该是这个地方的啊,这个叫TMP的,我看是哪一个啊。
这就说他肯定是一个模板啊,就是说你在哪里那个的问题,他有可能是这个缓存啊,一些JS文件调用都有可能,这其实就是做二次开发的一个事情。

那看见没改了呀,四个叉你看出现了吧。

出现了四个叉,我看哪个改的是四个叉,前面,来哪个改的是四个菜,搜一下吧,啧哎呀,怎么搜不到了四个叉的啊,这个是四个叉,那就这个嘛,这个文件在哪里啊,write看到没,是这里啊,呐是这俩right啊。
我说我改错了目录吗,白黑的,我刚才改的是默认里面的,就是它其实自带几套模板,只是说你用到那个模板,那模板那可在后台首页就是设置,这哪要翻车呢,这无非就是找错目录而已,我因为我不知道用的是哪哪哪个目录啊。
我只是以为是这个默认改了,默认不会翻车,怎么会翻车呀,翻个锤子翻,这不叫翻车,这只是说你自己信息没有整理沟,检查完又能把这个问题检查出来,就没问题,你看这个就是它的一个模板,就这个它调用的是是哪个模板。
就这里面呢用的是这个write这个bridge就是白黑。

那刚好这个网站打开了也是个白黑的那个界面,所以符合他来个白黑界面。

他用的是个白黑的模板,那就这里改,你看他就是这么一个地方的显示这个地方。

然后你看后面那个叫变量z blog p p ATM,那应该就是对应的是什么值啊,是不是就是这个z blog7。1R呀,对不对,你不信的话,你可以打来到他数据库里面去看对吧,他数据库里面你看啊。
那肯定就是其中一个内容里面的东西嘛,是不是啊,是表格呀,或者是这种东西的一个对应值,是吧,就是它里面对应的那个那个值啊,就是放肯定是放在哪里在啊,查找一个类命值,就那个后面那个对应的东西。
那变量的话可能是数据库里面存储,有可能是他自自自自定义设置的。

就这个地方对吧,那就是说呃我们看到这个页面上呢。

包括这个下面这个值和这个什么z blog,七点夜宵有可能是数据库里面储存,有可能是这个变量里面存储,你可以跟踪一下这个变量,对不对。

你可以看下来,我们搜一下,是吧啧那么其实这里那就很清楚了,也就是说你运行的这个页面,这个尾部文件FO特点,pp在下面显示的这个内容这个地方是吧。

其实在这就是模板,那么也其实很简单,我们这里呢可以自己呢再写个页面,看是不会受到影响呢。

来笔记很简单,我们只能写一些其他东西,你比如说啊这样子啊,我写个东西,那我写个PPPL口,或者说我换个行好吧,我把这里换个行,你看啊,我这里加上这个代码,然后换行一下BR对不对,保存一下。

刷新一下来看到没,是换行了,下面的页面都不正常,你看那换行了吧。

是这个模板呢没问题啊,就是你访问这个页面。

那它调用这个负点pp访问的时候,哎,这个下面的处理pp就是下面这个做这个事情的。

然后它每一个那就是头部呢是方的,首页呢就是index,那么就在这里改啊,这是它显示样式的地方,意思就是说放我首页,它就按照这个ATM代码的模型去显示,然后呢再到所有文件去调用,来替换这几个地方。
所以这个呢就是负责央视的好,那么大家就知道这个模板的应用了,我还举了一个这个网上的开源程序成品,给大家演示,那么大家就应该知道了,我给他一讲,大家就明白了这个源码的体系架构,明白体系架构。
你就知道以后你在做代码审计的时候,哪些是重要文件,哪些不是重要文件,所以我们讲这个不是说是吧,和安全不相关的是很相关的,好啦这个东西搞明白之后,他有什么安全问题呢,好大家可以看一下啊。

有什么安全问题呢,我们来到我们的例子这边来啊,先不看这个z blog了,z blog呢搞清楚之后啊。

我们这里呢就看一下这边我们的代码啊,你看有什么有什么不一样的地方呢,大家看一下啊,那么它就会出现什么安全问题啊。

比如说啊你现在啊我们看一下啊,我们来到我刚才那个这个地方,他用的是ZM01嘛,这是他的新闻对吧,你看啊,我把这个地方假如我添加新闻的时候,这个新闻添加应该是后台添加啊,比如我添加新闻的时候。
我把这数据里面插入一个东西,大家可以看一下啊,我插入什么东西啊,我在这个标题或者在任何地方啊,只要这里的任何地方都行啊,比如我在这个地方啊,爬到这个pp代码里面去,假设咱pp引波我查了这个问题啊。
好我查了之后啊。

就是标题里面突然多了一个这东西,好当我们去打开这个页面的时候。

我们看一下啊,打开这个页面的时候会出现什么情况呢,来看一下啊。

看到没,这是什么东西啊,是把批评音符执行来一个哎,为什么会造成这个原因呢,其实就是因为你在页面去渲染这个模板的时候,运行了一些代码执行。

所以导致你明征文中数据中再取出来,执行的时候也把这个pp服了。

给他执行了,所以这就是代码执行漏洞,最容易产生的第一个地方就是我们的模板,这里因为模板要被调用运行,那么一旦模板中有这种代码就会被执行,或者说很简单的道理,这个地方改了会造成我们把三条线删掉之后。
我们重新刷新,它没有了是吧,它没有了没有这个东西了。

然后呢,但是你的模板中,如果说你的模板中这个模板就中是吧,你把它修改一个东西就很简单啊,你比如说在这里啊,我写成这个东西,你看啊,我写这个PB代码,它也是一样的道理,那他取这是ATM代码。

我们直接访问它,它是没有任何反应的,没有这个pp用符。

因为它执行不了这个PP代码,对不对,但是呢你去访问这个页面诶,搞错了,修改错第一方这个地方,那是哪个项目的。

那你打开它,它现在呢就是呢显示呢就不会显示这个东西,你看下面就没有是吧,然后呢当你去访问news点pp,去调用这个模板的时候,我们下翻,那看到没pp以后就被执行出来了。

对吧,访问的是news点pp触发了这个new点ATM的代码,为什么,因为这个六点pp在渲染这个60点ATM代码,它把它进行什么执行,因为他要用它里面的样式,所以导致pp这里面的PB代码也被调用执行。
所以这两个实验其实就是告诉大家,很简单的道理,这就是在后台中经常出现的代码,执行当中的一个难性,就是你在后台中,你要执行PB代码,可以在模板中去查入这个代码内容,他执行来让这个地址呢来解析你的pp代码。
来形成一个后门,这是第一点,第二点,代码升级中关乎模板上面的,如果说你通过代码里面能操作模板的话,那极有可能就会引发代码执行漏洞,因为这个模板能修改,那么如果你把这个代码写进去,就会造成这样的问题。
是不是好,那这一种呢是我们自己写的模板,而并不是说我用到了别人的模板,啥意思呢,我刚才做的这个演示,这个模板是我在网上的水面找了个ATM代码,然后再修改一下自己写的模板,那自己写模板漏洞百出。
因为你不懂得怎么控制这个安全问题,你知道显示,所以说呢,网上呢就有人又开发出的第三方的模板,那么在pp开发中用的最多的第三个模板。

叫做SMARTY,这个是pp的内资,而不是内置模板,就是第三方模板,就是别人呢给你写的,你看pp的开发模板引擎,它是干嘛的呢,就是专门来渲染页面用的,让你的页面呢更加美观,又能确保安全性。
就会有这个叫这个东西,就是别人给你写好的模板,就不需要你自己呢是吧,就像刚才一样,这个TM来表白了啊。

这个ATTEM代码呢就是我们写的是吧啊,这是我们写的好,对不对,那么现在呢我们就给大家演示一下,如果用第三方模板的话,我们刚才的这种思路是不是就不行了呢,好接下来我们就来演示第三方模板的使用。
刚才的是我们自己写的这个TM代码是吧,这是我们自己写的,是这样写的,对不对,然后在页面呢是我们在自己设计的是吧。

总我刚才自己写的,你看自己写的这个东西好。

那这是我们自己写的,我们现在呢再来看一下,如果我用第三方模板的话,会是怎么一个情况,那么接下来啊用第三个模板看着啊,现在呢我们再往下了一个第三个模板,这是它的文件,他如何使用它呢,不会使用。

可以简单的去学习一下这个模板的使用,啊他说怎么使用啊,这里网上有是吧。

哎大不大概过程呢,我给他说一下,就是第一步该怎么做。

第二步该怎么做,第三步该怎么做,首先呢他的第一步就是啊创建一个文件夹,或者说你直接把这个文件夹命名,命名好之后,把这个版本的给他解压进去,把模板文件解压到文件目录去,然后呢随便创建一个文件文件里面。
就用这种代码来去调用模板,然后呢我给大家演示一下啊。

给大家演示一下,所以在这里呢我们就给怎么样呢,先把这个我把它给它解压一下,写完之后呢,把名字改一下名字,那就叫smart杠demo是吧,然后把这个文件夹呢给他放置到我们的项目中。

放在我们项目中啊。

来放在项目中粘贴,复制到根目录好,你看这个模板就导入进去了是吧。

哎这里级别有点问题啊,我把这里删掉一下。

他是在这个路径下面,我们把它取个根目录吧,把这个名字重新改一下。

好这样对了,重新来复制一下啊,先把这个删掉,好重新来导入到这里啊,复制一下CTRL加C好拉开这个就算模型啊,好如何使用它呢,大家看一下啊,我们找到首页文件。

我们随便创一个啊,比如说我随便创建一个这个文件名,可以随机的啊,不是说必须要的。

也是这叫INDEOR吧,Industor,然后怎么办呢,这个是要调用代码啊,来我们把单用代码来拿出来,这个代码呢就是一一体的。

来一体的,然后这里要改什么呢,首先第一步改路径呐,这是包含的这个模板目录,刚才导入进去的模板目录,这个路径对应上呢smart dmo labels,然后对应的这个什么smart class。
这个是配置文件导进去之后创建实例,然后这里有个叫模板的这个引擎,这里呢也把它目录这个地方改成这个目录,比如说现在呢我把名字改一下啊,我让大家明白一点,就这里呢不采用默认的,我一改一个这个目录。
几个地方都要改,我先把它改一下,让大家明白啊,主要是等下怕这个目录你改名了之后,你不会用,简单用一下就可以了啊,好啦是这个嘛是吧,把名字改一下啊,我名字呢就叫这个smart,就叫这个名字。
改了之后把名字改了,然后这个地方的意思呢,把这个地方全部改就完了啊,就这个目录对应章的就把改一下就行了啊,其他就不用动了,好然后呢改完之后下面呢你看啊,他说呢配置模板标题就把替换成欢迎使用smart。
然后这是模板的地址叫index TP l,它的模板呢是TPL的格式,然后这个时候啊你就找到你的模板目录,找到一个叫名字叫做什么,你要和这个名字应呢,这是模板的目录,那么他的目录是TAS。
那么你就取名一个叫这个名字的。

在这里面新建目录。

然后在这里呢放置index tpl,那这里创建一个什么index TP l这个文件,你在pm上写什么东西呢,就是HTM代码就完了,然后HM代码呢我们可以随便生成一个,或者说我用到刚才的这个user。
把它放在也可以,然后呢你看啊它会更改什么呢,就把标题更改成欢迎使用smart就完了,好我们试一下啊。

这是我们的模板,我们打开index app。

哎不对呀,那我还是用他官方的这个模板吧,那就这个吧,就把改一下就可以了啊,哦我知道了,他这个title呢不是这个我们要改这个地方,改这个地方来搞错了,这还没改啊,欢迎使用,我打开,唉,还有不对,妈的。
他不用不自这语法啊,他不制这个语法,不能用这个,用这个,然是个变量啊,他是个变量,那就用这个变量呢,然后在他去显示这个title,就他的语法呢,就是你这里呢要换上这个倒数变量,它就知道来换上去。

然后呢你看一下啊,现在我们来访问页面,你看访问这个首页就自动变成了欢迎使用,然后这里你改改什么,它这地方就改什么,看到没,他就用了这个这个模板呢,用这个模板呢对应上了。
如果说你用刚才我那个模板也是一样道理,那用我刚才那个模板60的,那我只需要改个地方来把60的写进去,比如说我改这个标题,这里是吧,标题这里我就加上TT,就和他一样的写法啊,一样的写法好。
这次的我们再来访问,怎么不对呀,不能这样写吗,莫名其妙还只能这样写啊,哦这里还有个好,那这里呢就是可以看到啊,这个第三方的模板呢,我们就把写呃这个smart模板,那就把它搞清楚了,你看就把它搞清楚了啊。
这个就使用这个模板呢访问index app的时候。

index pp没有做任何事情,它加载的是这个index TP l的模板,然后这边index pr模板里面显示的是这个内容,你访问是访问不了这个index hell不是个文件啊,你访问不了。
里面是TM代码,然后这呢会替换这个t ta值,把替换成呢欢迎使用,那么同样道理,如果这里让你进入数据库查询的话,那么就以此把数据库的查询的值呢替换,这里就完了啊,就不说那个事情了,那个相信大家都会了。
就我这做了个例子是吧,去解析它好,那么现在你看啊,我们用到的第三方模板之后,我按照我刚才的思路来讲,如果说这个地方有这个pp代码的话,他能不能去解析这个什么,解析这个p p m for代码呢。
是会会造成这个变量值啊,代码执行漏洞,那你看啊我写到这里,刚才那个呢是改了这个模板文件之后呢,就能成功的就在index这里啊,但这个60我们自己写的模板,这两个是我们自己写的模板,在ATM代码呢。
这里呢写上这个什么PB代码,的时候,当我们去用这个index pp文件,去解析这个ATM的模板的时候,访问的时候呢,它就会执行这个批评服务是吧,好那么现在我这个呢换到第三方模板。
现在用的是smart这个第三方模板,然后在index p p l这里呢写上这个东西。

那么它能不能解析出来的访问。

大家可以看到没有任何反应,这个批评符写上去没有任何用处,包括这里呢为了显示跟马尾,我可以输出个123,如果正常的话。

它执行的话会输出,但这里可以看到我们访问index之后呢,它没有任何反应。

也就是说这个代码在这里没有对执行,是不是就安全了呀,是不是就安全了呀,好一旦安全之后呢,大家又会问了,那你妹的安全了,那里面的夹子壳还有啥用呢,安全是归安全,但不代表绝对的安全,啥意思呢,我现在一讲。
大家豁然开朗,讲个什么啊,好我把思smart我们现在呢就是写一下思路理想啊。


今天的核心点就是在这里。

就是想讲把这个内把引出来什么呢,看一下啊。

那首先啊,我们第一种啊自己,自己写的模板啊,这个安全直接有个RC1的安全问题好现在呢,我们用到了这个第三方的这个模板,这个smart py这个模板是吧啊,经过我们的测试啊,没有直接的安全问题。
我这里说的是没有直接的安全问题啊,没有直接的RC1安全问题,好好搞清楚了啊。

那么现在看啊,好smart,你没有,我们现在测不出来。

但不代表没有人去挖的这个漏洞,他没有包过漏洞吗。

搜一下给看下来,smart漏洞,模板注入2017年包裹,那2017年包括3。1。3R的一个漏洞,然后呢除此之外这个CV1呢CV12017,包括还有这个cf12021年,也包括,那么这个案例我们再来演示。
我们先看一下这个CV120121年的一讲呢,又来到漏洞这里来了,但是不得不讲讲了之后,我将刚讲开发的是没有任何卵用的,你看啊CV1的2017年漏洞,这个漏洞的影响版本,你也看到是一个小于3。0。3R的。
所以呢我就下载这个版本是3。1。31。

刚好是在这个版本区间,我刚才用的是这个4。3。1,是它的追星版,然后还有个3。13的一的这个版本好,那么现在我把3。31这个版本被他压缩出来,然后用这个模板去珍藏,解析的时候,再利用这个漏洞看一下啊。
把结算好,然后呢把名字改一下,改成叫3smart3。

改成smart3,把smart3来到我们这个项目,是吧,确定进去一样道理啊,这司马三,然后呢我们按照这个逻辑啊。

按这个逻辑再创建一个文件,叫index一点pp应该是一。

就是刚才我们调用那个模板的一个。

那个那个操作是吧,然后呢,我可以直接用那个漏洞源代码给大家看一下啊,弄个圆的吧,来刚才的这里,那这里也有啊,你都可以看一下,这个都差不多的,这个没什么,就是说他用的时候呢,就这个安全问题啊。
哎也没啥其他的一些东西,包括这里还有个参考文章,这里还有个参考文章,哎这个漏洞原理呢我们先不追踪,就是说我们先要搞清楚,这个事情的一个真实情况啊,然后我们再把后续呢给他弄出来,还有这个文章。
他这个好把代码复制啊。

来用这个模板引擎的来去呢,然后修改一下啊,调用的地方,那这里呢是这是我们三版本嘛,这里就把去掉啊,路径把它改一下,让他先正常解析啊,这个路径呢我们也搞成这个叫这个路径吧,他用的应该是LINUX系统。
LINUX系统是TMP好,这个路径改了之后诶,这是它的模板的一个情况好,我们先来看一下啊。

访问好,这是他的一个输出啊,输出呢就是一个CV1的一个测试的。

一个这个引擎,那他就输出呢正常呢index里面,然后呢结束这个叫get1fl,我们把它解释X吧,把改一下,结合X啊,大家看一下啊,看着啊,我让他解出X,所以说X呢我显示个什么先移对吧。
它就display test等于一,就解释这个值啊,然后呢他跟用的是哪个模板,我们先不管它,这是这个文件呐,用的这个是下次用这个文件的去啊触发模板,但是这里啊当我们去输入一个东西的时候。
按照他这个测试流程来,把模拟下看着啊,X等于,新港pp里波括号,斜杠斜杠回车,嗯哦打错了。

看到没批评或执行出来了一个代码执行,这个案例就是说表达了几个方面的事情。

利用这个smart模板的时候,当你去渲染一些模板加载的时候。

也同样也会出现漏洞,这个漏洞是别人挖出来的,就是模板,虽然说你用到第三步,我们俩直接行的不行了,但是不代表你这个模板没有报出漏洞,现在呢我就是利用这个模板网上报出漏洞,进行一个漏洞复现。
利用这个模板呢载入到我们的项目中,触发这个他的一个漏洞,形成执行一个代码,可能大家会问这个东西有什么用啊,现在呢不是关心这类的事情。

就是说它会造成这个漏洞,这个漏洞具体有什么用,我们先再不管它,那么这个案例就告诉我们一个事情。

告诉我们几点啊,自己写的模板不安全,第三方模板就不一定也是安全的,因为第三模板他也有漏洞,那么截止目前把这个模板一讲,大家就知道了,除了本身的代码逻辑漏洞,代码漏洞外,疑点本身的就你自己写的代码漏洞。
这第一个漏洞,第二个第三方查检,第三方模板,第三方组件插件,我们举例的是什么,U1里当时在做编辑器的时候,不知道大家有没有印象。

我用这种插件来便于我文件上传,文件编辑用到了UEE的封装的。

我这里代码中还有的嘞,你看是不是在讲那个呃留言板的时候,把这个查询器呢,UIT他有没有漏洞呢。

网上也包括漏洞啊,来。

第三方模板,今天讲的SMARTY,第三方组件在java居多,在java里面居多,java里面有什么大家都有一些影响的呢,像这种的,本色代码漏洞是什么,我问你啊,你自己写的漏洞有问题。
就像我刚才说的那那个模板也是我写的,那就是我自己代码,我自己代码呢不安全,有漏洞,你用到了网上的插件,模板组件,只要这个东西保护漏洞,符合漏洞的版本也会造成漏洞,那么这个案例就恰恰说好这个事情。
大家就可以自己想一想,你代码升级你省什么东西,是光审本身的代码吗,不是任何东西都要省,加载过,用过哪些插件,插件有没有报过漏洞,用到哪些模板,引擎,模板有没有漏洞,包数过版本是不是符合组件。
组件上面包不包漏洞,符不符合,这才叫代码升级,对不对,为什么学开发我们花这么大精力给大家讲,为了什么不讲这个东西,演示,我光我说你是记不住的,也是印象不深刻的,但是把这东西一讲对吧。
不是说我这里呢组件我也想讲,但是pp组件实在太少了,所以当我们再去讲java开发的时候,把java开发里面去用到组件,然后呢造成漏洞,那么大家就知道了,哎java代码审计中要看组件有没有安全漏洞。
这也是java代码审计中一种技术,诶大家就知道了,是不是,所以说呢从这个开发的角度,要去看待这个漏洞的分析,包括漏洞的挖掘。

他这个思路这就很清晰了,包括今天我们演示这个呃,60上面的这个东西是吧,用到这个函数,那不用这个函数就不会造成这个漏洞,所以说呢很多东西啊都是这个息息相关的,那这个是我们自己写的这个代码的一个渲染。
就是模板应用这个60和是吧,ATTEL这是我们自己写的,然后这边是央视啊,那边是这个调用的渲染,然后这个index呢啊,index这个文件呢是我们用到的一个四点几版本,对不对,用了个四点几版本,你看啊。
现在呢我刚才用到的这个index1,他用的是这个smart3是吧,smart3的这个版本造成漏洞啊。

大家可以看到刚才那个页面页面呢,那就这个还用的是index1。

用的smart3的那个模板是吧,对不对,你看啊,我现在把这个一改,因为这里呢我有两个版本了。

一个是smart,一个是三,刚才那个版本呢是我从这个啊压缩包。

4。0版本解说了,但他有两个版本啊,一个4。0的4。0X的版本。

一个三点版本,对不对,你看啊,我用三版本的时候呢,在这边测试的时候。

他有这个代码执行是吧,那大家可以看到这个结果,现在呢我把代码一改啊。

我欢做成这个smart smart是就是那个四版本呐,你如果说有问题是吧,不是这个漏洞,你看啊,我现在换成四版本的这个引擎,就是我换一个目录,因为它有两个目录嘛,一个是这个四版本的。
还有个这个是三版本的是吧,好你看啊,我把这个目录换,现在我们重新来看一下这个页面啊。

健康里面,那你看它还能正常显示,我们把这个复制粘贴,你看没有啦,你看来没有了。

还有个锤子啊,但是呢你又把它换成这个漏洞版本来,漏洞版本再来一保存一复制粘贴。

复制来又有了,是不是的呢,漏洞对应版本的漏洞没有做任何改变,代码一致,就是换了一个版模板的版本,一个是四,一个是三版本,三版本那个有漏洞,四版本这个没漏洞,然后你看啊。
网上呢也关于这个呃漏洞的一个收集呢,也是有写的,我刚才给他搜过是吧,A r t y,我还是直接在这个在这个在这个网上百度上面,给他搜的是吧,那除了这个之外,你看这个我们可以查一下这个网上CN飞机啊。
或者一些地方是吧,可以搜一下这个名字,看它包括哪些漏洞,对不对,它肯定不止这两个是吧,来,那,哎这个是哎呀,这里面的应该只是搜标题,搜标题吧,不能搜这个描述,描述里面可能是别人,别人。
那你看啊这几个是什么,你看什么think up路径编辑都种啥情况,你看他说了single up存在,按照该漏洞源于受到了smart class路径的漏洞影响,看到没啥意思啊。
就是说这个程序呢他用到那个smart引擎,导致他有漏洞,所以说就是你自己写这个代码的时候,写的核心是本身代码没有漏洞,哎你用到了个模板,这个模板有漏洞,那不好意思呢,那你也有漏洞呢,能理解吧。
你用到了别人的模板,更方便了你的开发。

但是也能造成这个模板的安全,对你的影响。

包括这几个呢,这几个都是一样的,这个什么任意文件它也是一样的,感源于漏洞在什么文件中啊,这个不是啊,这个不是可能这里有关键字啊,关键字是什么什么引擎,但是漏洞不是这个引擎造成的啊,这个是关键字。
就是他用的这个模板引擎,但是他用的这个模板引擎版本可能没有漏洞。

再搜一下,不搜这个仅仅搜标题吧。

那这是它包裹漏洞,你看呢是吧,刚才呢,smart刚才那个新的PS是不是用到了这个啊,这里有个对比的,你看这是这套程序,它用到这个模板引擎,模板引擎里面有个路径超越漏洞,你看本身这里有个漏洞,引擎漏洞。
你看是不会造成它用到它,不好意思,你受到影响呀,我本身我也是个路由途中,你就用到我这个版本,用到我这个版本的模板引擎,哎,不好意思啊,危害到你了,对不对,你看这是他模板本身的漏洞,然后那里用到这个模板。
已经开发了CMS也受到影响。

就和我一样,比如我把源码写好了,我封装成一个CMS,我用到这个漏洞350%诶,刚好这里有个代码执行,有个名额,这个RC1漏洞,那我这个3MS我里面的代码,像这些什么其他文件,我写的非常好,但是不没用啊。
你这个模板也有漏洞,还是能利用这宝宝攻击你啊。

对不对,所以啊今天的这个思路点呢就给大家讲到这里,然后下节课开始,我们下节开始呢是p two p开发的,最后一讲讲那个框架开发,把那个框架开发再一讲啊,那基本上整个代码升级的那个思路是哪些东西。
包括这个会造成哪些漏洞,都很清楚了,为什么框架的是怎么审发,而不是框架的优势跟什么审发不一样的,这个整体的一个开发的,那个框架的架构呢就比较清晰了啊,啊这这就就明天pp开发最后讲完啊。
那其实pp开发呢和那个java开发呢有点类似,只是说它的安全机制,包括代码呢不太一样,但是他的这个思路是一样的,就是说怎么去挖漏洞,分析漏洞,代码审计的一些思路,那是一个点,呃今天这个内容讲完了啊。
内容还是比较少的,不多,然后还有最后一讲,最后一讲呢就讲这个pp的开发时会讲,就讲这个框架开发,这几个点呢我们基本都讲了啊,哎对对对,我想起来了,我好像还有个东西没讲,就是这个逻辑越传的啊,对对对。
下节课呢就是除了讲框架开发,还有一个逻辑越传的这个代码段,上节课呃,上节课有人提出来的,我差点忘记了啊,那就下节课把那两个都把垒上去啊,这框架的和这个我记得,就造成逻辑漏洞的一些代码演示和它的原理。
好内容呢,我们今天就上完了啊,看大家有没有什么安全问题啊,有安全问题就问,没有安全问题,我们就早点下播呀,我这你妹的到现在饭都还没吃呢。

是不是,哎大家有没有问题啊,有问题就问啊,哎呀你们真的是一张嘴呀,妈的上的时间长了都跑了,伤的时间短了,有时候短了,真是没办法呀,天天不上课的时候说我要跑路,上课的时候每次在群里面艾特什么太高端了。
不上听不懂,明年见,后年见不上,求我哎呀,真的是牛逼啊,模板漏洞怎么判断,现在我们是讲原理啊。

没有说怎么判断这个模板漏洞,很简单的道理。

你看一下我刚打开那个网站吗,我前期你要说这个是吧。

刚好的温起来了,这,跑哪去了,这。


看着阿拉,哎呀这个鸟毛他没收集出来,这个这个这个脚本,我是我看一下,我把它第一次打开,哎就不能怪我了啊。

这个鸟毛这是他收集不出来,很尴尬了。

其实呢就是很简单,我们这个信息收集的时候呢,黑盒角度呢,就是用这些插件工具呢来识别它的模板,他这里有些是能识别出来的啊,他这里没识别出来,这有些尴尬,所以说这东西呢哎也不好说好和不差的啊,也不好说。
这个好和差,有时候耐它能识别出来,有时十别出来,这个咱们是不是啊没有识别出来,就说有些地方呢你就是从这个黑盒里面啊,黑盒里面呢设置出来他的模板,然后呢你就查一下这个模板logo去测,对不对。
这说的第一种啊,还有同学是说白盒里面就直接能看代码,看代码,那就简单了呗,直接看代码里面是不是那个模板就完了呗。

主要是两个角度啊,所以说你说怎么测,就这个意思啊,就是信息收集,黑盒里面就是用这些工具插件呢去识别,然后呢整理这些模板的一些特点啊,白盒里面就直接看代码加载的模板和这个版本,有没有安全问题。
网上有没有报过漏洞,其实也不难啊,呃你说代码中搜关键字,那其实就是各种模板的一些特性,就比如说他有加载哪些文件啊,特定的关键字和那个CMS识别一样是吧,可以在里面去搜索一些特定的一些东西,来符合特征。
如果我说这些话大家能听懂,那就说明你把前期的课程学好了,听不懂,那就是没有学啊,你们搞错了啊,这个模板是不是一样的,网上那个框架是框架,有框架,有模板,还有这个组件都是不一样的,你刚才说这个level。
这是框架,不是模板,模板是不一样的,模板是刚才我说的smart那种类似的,框架组件模板去不了,模板就是显示页面的美观的框架,就是核心代码逻辑,逐渐就是说它上面有一些其他功能,需要用到一些东西。
就是类似我们说的第三方的这种,和插件意思差不多的一个东西,你想这个single pp里面,那是个pp里面。

比如说这个pp里面的这个框架呀,组件这些对应关系,你看框架里面有哪些呢,比较常见的,啊这个sink p h p是吧,level y i i就刚才大家说的什么level那里是框架,对不对,这是常见的。
然后呢我们说的这个模板,就我们举例的SMART喂,除了这个之外呢,还有几种,你可以网上查一下CP,我们,常用模板是吧,那smart啊,你自己网上查了啊。

他也很多啊,然后呢再是我们说的这个组件,组件呢其实就是java里面多。

pp里面别少,嗯有这些拿什么这个link就处理这个什么啊。

图片的,还有这个什么东西呢。

这一大堆的啊,处理图片的,还有一些是处理这个数据库缓存的呢,这些地方的那金德呢之前也报过漏洞是吧,还有这个呢这个当时也包过漏洞,这个image medicine,还包括漏洞处理。
这个图像的处理什么东西的是吧,假如然后呢我们说的茶节呢,就类似于说这里呢搞了一些第三方的,什么编辑器呀,或一些啊这都是的,也可以把这个场景呢归类到这个组件里面,也可以把这样理解也行啊。
所以说这个框架呢它是核心,它的一个概念就是我们说的核心开发,就说这个代码的所有逻辑的一个核心,然后这个模板呢就主要是干嘛的呢,就是显示这个页面的这个没关的啊,它是主要负责这个的啊,对吧,他是负责这个的。
知道吧,然后这个组件呢就是我们类似说的啊,一些第三方功能的啊,这第三方哪些功能呢,是吧好吧,先写一下啊,来,然后什么功能呢,比如说啊什么这个图片处理的是吧,然后还有什么这个数据转换的。
还有什么数据库的一些操作的对,那么像这个框架的核心代码,它的逻辑是干嘛的呢,其实就是说啊它的核心就是你的代码逻辑,啥意思呢,利用这框架开发,就是按照这个框架里面,自己的这个代码去写代码。
其实就是说你的核心功能,是用这个框架把它弄出来的,这个下面什么模板组件,都是用来丰富这些功能的啊,只是说他们负责不同的这个地方,在pp的,你像java里面是吧,也是有很多是吧,那框架大家都知道的是吧。
框架里面哪些spring以前的个STR是吧,quas or还是pin,对不对,boa这些东西对不对,还有我们说的这个一些常见的是吧,然后呢模板呢我不不知道很多,你可以查一下组件呢,那就很多了呗,是吧。
来组建的这个SLLY啊,菲斯可见SN啊是吧,还有一些其他的哈,我们就不写了啊,他们的识别我们有讲过,对不对,什么组件这些我有讲过吧,有些是工具能识别出来,有些呢是端口扫描识别出来。
就是根据不同的特征去识别,然后呢,我们主要识别的是从这个什么白盒和黑盒,那白盒就不用多说了嘛,代码都在你面前,你说怎么识别的,看就完了,自己翻自己找,主要说是黑别黑盒端口扫描是吧。
有些这个呃这个东西呢是会开放一个端口,还有现在就是我们数据包的特征,对不对,然后呢,就是我们说的用这个什么识别识别插件啊,工具啊等等,都是这些流程是吧,主要说黑盒嘛,白盒那就直接看就完了呗,看代码呀。
看他的目录啊,看名字啊,对不对,就是大家刚才提出的问题啊,我给大家解释一下,这个呢我没有暂时截,我是准备说这个东西,因为是漏洞方面的知识点,我们当时讲到这些漏洞的时候,会给大家说的,从它的识别。
然后呢黑核识别,那是漏洞浮现的时候会给他讲白合识别,那是在代码审计中也会给他讲,这慌个什么东西呢,对不对。

log4J是的啊,log c s属于组件啊,是的,他是搞日志的一些这个操作的啊,日志的java里面的日志知这方面的一些东西,音乐播放器的插件能不能当个突破口,这个是这样的啊。
你具体要看这个这个这个这个插件,它的一个核心,你想象一下啊,你先要想到这个场景它是干嘛的,你说它是音乐播放的,你觉得音乐播放这个功能,会不会涉及这些敏感的函数去调用,你先要考虑这个问题。
为什么我们一直会强调说今天写什么功能的,这个页面,就是因为这个功能它里面会用到很简单,你做文件上传,你难道就不能就就就逼啊,就就就这个不用这个文件上传类的东西,能够进行文件上传吗。
就是你必须要用到文件上传那些函数,那么它就可能产生稳定,产生漏洞,你说的音乐播放期,你觉得他的实现会用到哪些东西,这些东西会造成哪些漏洞,就很简单,这个插件他做的事情很单一,啥都没有搞。
它出现漏洞就很小漏洞,他这个插件做的操作越敏感,功能越多,就越容易出现漏洞,就是看这个插件的具体功能,然后那你自己去想一下这种功能,用开发里面去做的时候,会用到哪些操作。
这些操作的函数是不会引发一些安全漏洞,你只要记住这一点就可以,我们一直强调的啊,你像我们这个科外边人去讲课,讲漏洞是告诉你怎么用是吧,我们讲课时,可很多东西都是从这个思想上面给你提,像这个什么讲漏洞。
说从功能点上面去分析漏洞,这还是我自己那讲课,把他提出来的思路,别人都不这样讲的,你不你们自己也看过很多人的课程是吧,对不对,不是牛逼啊,不是说吹牛逼,只是说你自己呢要把它学好的话。
很多东西呢你要自己去想去思考。

这都是思考来的,网上有些东西呢你看了你不能引发自己的思考。

那也没用的。



浙公网安备 33010602011771号