open_basedir 和 wordpress

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 移动到其自己的站点目录中?

答案1

这很直接,但解释得很好:open_basedir 就像尿裤子来保暖一样。

是的,它可以防止 file_get_contents 等函数访问所需目录之外的任何内容。但是我可以使用 exec("cat /etc/passwd", $res); 或执行类似操作的其他一些函数。

但是,要回答你的问题,在 PHP 中执行此操作的方法是添加允许的文件夹,并用冒号分隔。例如

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

答案2

在文档根目录 /var/www/wordpress-site 中为 wordpress 提供一个临时目录并让其使用该目录。

不要将 /tmp/ 添加到允许的目录列表中 - 那样不安全。

相关内容