PHP5安装配置和Zend Optimizer安装教程
右边的覆盖左边,所以变量的滥用极易造成程序的混乱。而且脚本程序员往往没有对变量初始化的习惯,像如下的程序片断就极易受到攻击:
//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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |