快速业务通道

PHP5安装配置和Zend Optimizer安装教程

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-16
右边的覆盖左边,所以变量的滥用极易造成程序的混乱。而且脚本程序员往往没有对变量初始化的习惯,像如下的程序片断就极易受到攻击:

//test_1.php 
if ($pass == "hello") 
$auth = 1; 
if ($auth == 1) 
echo "some important information"; 
else 
echo "nothing"; 
?> 

攻击者只需用如下的请求就能绕过检查:

http://victim/test_1.php?auth=1 

这虽然是一个很弱智的错误,但一些著名的程序也有犯过这种错误,比如phpnuke的远程文件拷贝漏洞:http://www.securityfocus.com/bid/3361

PHP-4.1.0发布的时候建议关闭register_globals,并提供了7个特殊的数组变量来使用各种变量。对于从GET、POST、COOKIE等来的变量并不会直接注册成变量,必需通过数组变量来存取。PHP-4.2.0发布的时候,php.ini默认配置就是register_globals = Off。这使得程序使用PHP自身初始化的默认值,一般为0,避免了攻击者控制判断变量。

解决方法: 
配置文件php.ini设置

register_globals = Off。

要求程序员对作为判断的变量在程序最开始初始化一个值。 

3、文件打开

极易受攻击的代码片断: 
//test_2.php 
if (!($str = readfile("$filename"))) { 
echo("Could not open file: $filename
\n"); 
exit; 
} 
else { 
echo $str; 
} 
?> 

由于攻击者可以指定任意的$filename,攻击者用如下的请求就可以看到/etc/passwd:

http://victim/test_2.php?filename=/etc/passwd

如下请求可以读php文件本身:

http://victim/test_2.php?filename=test_2.php 

PHP中文件打开函数还有fopen(), file()等,如果对文件名变量检查不严就会造成服务器重要文件被访问读取。

解决方法: 
如非特殊需要,把php的文件操作限制在web目录里面。
以下是修改apache配置文件httpd.conf的一个例子: 

php_admin_value open_basedir /usr/local/apache/htdocs 

重启apache后,/usr/local/apache/htdocs目录下的PHP脚本就只能操作它自己目录下的文件了,否则PHP就会报错:

Warning: open_basedir restriction in effect. 
File is in wrong directory in xxx on line xx. 

使用safe_mode模式也能避免这种问题,前面已经讨论过了。

4、包含文件 
极易受攻击的代码片断: 
//test_3.php 
if(file_exists($filename)) 
include("$filename"); 
?> 

这种不负责任的代码会造成相当大的危害,攻击者用如下请求

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号