文件包含漏洞
include()、require()
include (或 require)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中。
include函数:会将指定的文件读入并且执行里面的程序;
require函数:会将目标文件的内容读入,并且把自己本身代换成这些读入的内容。
include 和 require 语句是相同的,除了错误处理方面:
- require 会生成致命错误(E_COMPILE_ERROR)并停止脚本
- include 只生成警告(E_WARNING),并且脚本会继续
语法
include 'filename';
或
require 'filename';
- require 一般放在 PHP 文件的最前面,程序在执行前就会先导入要引用的文件;
- include 一般放在程序的流程控制中,当程序执行时碰到才会引用,简化程序的执行流程。
- include()与require()的功能相同,但在用法上却有一些不同,include()是有条件包含函数,而 require()则是无条件包含函数。
include_once()、require_once()
include_once (require_once)语句在脚本执行期间包含并运行指定文件。此行为和 include (require)语句类似,区别是如果该文件中的代码已经被包含了,则不会再次包含,只会包含一次。include_once(require_once)需要查询一遍已加载的文件列表, 确认是否存在, 然后再加载。
通常:include_once和require_once会有性能上的下降,因为他需要判断之前是否包含过。一般情况下,也不太需要去考虑,除非这已经影响到你程序的性能了。
文件读取漏洞
file_get_contents()
file_get_contents() 函数把整个文件读入一个字符串中。
语法
file_get_contents(path,include_path,context,start,max_length)
path | 必需。规定要读取的文件。 |
include_path | 可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。 |
context | 可选。规定文件句柄的环境。 context 是一套可以修改流的行为的选项。若使用 null,则忽略。 |
start | 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 新加的。 |
max_length | 可选。规定读取的字节数。该参数是 PHP 5.1 新加的。 |
注释:本函数可安全用于二进制对象。
highlight_flie()
highlight_file() 函数对文件进行语法高亮显示。
语法
highlight_file(filename,return)
参数 | 描述 |
---|---|
filename | 必需。要进行高亮处理的 PHP 文件的路径。 |
return | 可选。如果设置 true,则本函数返回高亮处理的代码。 |