文件上传漏洞


Php wrapper

流操作

感觉就是,php读取服务器里的任意文件,为了用一个格式,读取所有文件

对不同的文件格式,搭配上不同的解释方法

转载大佬:

https://www.csdn.net/tags/NtDaIg4sODMwNzAtYmxvZwO0O0OO0O0O.html

php官方:

https://www.php.net/manual/en/function.stream-get-wrappers.php

注册一个类:

<?php
$existed = in_array("var", stream_get_wrappers());//in_array 检测数组中是否存在函数值,stream_get_wrappers()检测已注册流的列表,返回一个索引组,其中包含正在运行的系统上可用的所有流包装器的名称,   这var个整个就是检查流包装器是否存在(我咋感觉流包装器,就是流解释器)

//在stream_get_wrappers()列表中是否含有var这个包装器

if ($existed) {
    stream_wrapper_unregister("var");

//取消注册url包装器,如果存在就取消
}
stream_wrapper_register("var", "VariableStream");

//注册一个实现为php类的url包装器,var是要注册的包装器名称(有效协议名称)

//后面是实现第一个参数


$myvar = "";

$fp = fopen("var://myvar", "r+");//使用给定模式打开文件

//写入
fwrite($fp, "line1\n");
fwrite($fp, "line2\n");
fwrite($fp, "line3\n");
//输出
rewind($fp);//rewind()将文件内部的位置,重新指向一个流
while (!feof($fp)) {//feof()检测是否读到文件结尾
    echo fgets($fp);//也是输出
}


fclose($fp);//关闭流,刷新所有的缓冲区

//输出
var_dump($myvar);//var_dump输出变量相关信息

if ($existed) {
    stream_wrapper_restore("var");//恢复以前未注册的内置包装器,把自己修改的var抹去,复原成原本自带的
}

?>

以上例程会输出:

第1行

 线2

 第 3 行

 字符串(18)“第 1 行

 线2

 第 3 行

 "

 

相关