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

http://tech.ddvip.com   2007年08月24日    社区交流

内容摘要:Linux操作系统下PHP服务器安全配置技巧

  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<BR>
");
  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就会报错:

责编:豆豆技术应用

正在加载评论...