一. 漏洞概述
在web功能设计中,很多时候我们将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。 在这个过程中,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心!
那我们这里可能会有疑问,目录遍历和任意文件下载以及文件包含漏洞有身区别了,其实区别不大。目录遍历和文件包含漏洞都可以使用相同的函数如require去引用文件。文件下载使用的函数和他们不一样如先用fopen()函数打开文件,再使用fread()读取文件。文件下载是会将文件先下载下来,而不会像目录遍历和文件包含一样直接就会在屏幕中显示内容,表现方式不一样而已。而文件包含最重要的特点就是能以二进制的方式打开图片,所以我们看引用的图片能不能以二进制的方式打开,能的话就是文件包含。这三个漏洞都需要以 ../ 路径遍历的方式去读取文件
在web功能设计中,很多时候我们将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。 在这个过程中,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心!
那我们这里可能会有疑问,目录遍历和任意文件下载以及文件包含漏洞有身区别了,其实区别不大。目录遍历和文件包含漏洞都可以使用相同的函数如require去引用文件。文件下载使用的函数和他们不一样如先用fopen()函数打开文件,再使用fread()读取文件。文件下载是会将文件先下载下来,而不会像目录遍历和文件包含一样直接就会在屏幕中显示内容,表现方式不一样而已。而文件包含最重要的特点就是能以二进制的方式打开图片,所以我们看引用的图片能不能以二进制的方式打开,能的话就是文件包含。这三个漏洞都需要以 ../ 路径遍历的方式去读取文件