Php
open_basedir 和 wordpress
本質上,我發現您可以防止一個存在安全漏洞的站點通過“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/ 添加到允許的目錄列表中 - 這將是不安全的。