Php

open_basedir 和 wordpress

  • January 27, 2012

本質上,我發現您可以防止一個存在安全漏洞的站點通過“open_basedir”修改/讀取另一個站點。

但是,當我使用 wordpress 上傳媒體文件時出現錯誤

[error] 3048#0: *42070 FastCGI sent in stderr: "PHP Warning:  file_exists(): open_basedir restriction in effect. File(/tmp/php51UUIj) is not within the allowed path(s): (/var/www/wordpress-site) in /var/www/wordpress-site/wp-includes/functions.php on line 2505
PHP Warning:  file_exists(): open_basedir restriction in effect. File(/tmp//TheFile.tmp) is not within the allowed path(s): (/var/www/wordpress-site) in /var/www/wordpress-site/wp-includes/functions.php on line 2340
PHP Warning:  touch(): open_basedir restriction in effect. File(/tmp/TheFile.tmp) is not within the allowed path(s): (/var/www/wordpress-site) in /var/www/wordpress-site/wp-admin/includes/file.php on line 177" while reading response header from upstream, client: 69.196.169.22, server: wordpress-site.com, request: "POST /wp-admin/async-upload.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fastcgi/php-fcgi.socket:", host: "wordpress-site.com", referrer: "http://wordpress-site.com/wp-admin/media-upload.php?post_id=245&"

從 nginx 中刪除這一行修復了它

fastcgi_param  PHP_VALUE            open_basedir=$document_root;

然而那是因為 open_basedir 被禁用,現在一個站點中的漏洞可以訪問另一個站點中的數據。是否可以擁有 open_basedir 並允許 wordpress 將 /tmp/somefile 移動到自己的站點目錄中?

這很直接,但解釋得很好:open_basedir 就像尿褲子一樣保暖。

是的,它會阻止諸如 file_get_contents 之類的函式訪問所需目錄之外的任何內容。但是我可以只使用 exec(“cat /etc/passwd”, $res); 或其他一些做類似事情的功能。

但是,要回答您的問題,在 PHP 中執行此操作的方法是添加允許用冒號分隔的文件夾。例如

"/var/www/horses.com:/tmp:/uploads" 

在 docroot /var/www/wordpress-site 中給 wordpress 一個臨時目錄並讓它使用它。

不要將 /tmp/ 添加到允許的目錄列表中 - 這將是不安全的。

引用自:https://serverfault.com/questions/354433