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

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

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

  下面的请求可以把/etc/passwd文档拷贝到web目录/usr/local/apache/htdocs/test(注意:这个目录必须nobody可写)下的attack.txt文件里:

  http://victim/test_5.php?upload=1&file=/etc/passwd&file_name=attack.txt

  然后可以用如下请求读取口令文件:

  http://victim/test/attack.txt

  攻击者可以把php文件拷贝成其它扩展名,泄漏脚本源代码。

  攻击者可以自定义form里file_name变量的值,上传覆盖任意有写权限的文件。

  攻击者还可以上传PHP脚本执行主机的命令。

  解决方法:

  PHP-4.0.3以后提供了is_uploaded_file和move_uploaded_file函数,可以检查操作的文件是否是用户上传的文件,从而避免把系统文件拷贝到web目录。

  使用$HTTP_POST_FILES数组来读取用户上传的文件变量。

  严格检查上传变量。比如不允许是php脚本文件。

  把PHP脚本操作限制在web目录可以避免程序员使用copy函数把系统文件拷贝到web目录。move_uploaded_file不受open_basedir的限制,所以不必修改php.ini里upload_tmp_dir的值。

  把PHP脚本用phpencode进行加密,避免由于copy操作泄漏源码。

  严格配置文件和目录的权限,只允许上传的目录能够让nobody用户可写。

  对于上传目录去掉PHP解释功能,可以通过修改httpd.conf实现:

<Directory /usr/local/apache/htdocs/upload>
   php_flag engine off
   #如果是php3换成php3_engine off
</Directory>

  重启apache,upload目录的php文件就不能被apache解释了,即使上传了php文件也没有问题,只能直接显示源码。

  6、命令执行

  下面的代码片断是从PHPNetToolpack摘出,详细的描述见:

责编:豆豆技术应用

正在加载评论...