Назад | Перейти на главную страницу

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 в свой собственный каталог сайта?

Дайте wordpress временный каталог в docroot / var / www / wordpress-site и заставьте его использовать его.

Не добавляйте / tmp / в список разрешенных каталогов - это было бы небезопасно.

Это очень прямо, но объясняет это довольно хорошо: open_basedir - это как мочиться в штаны, чтобы согреться.

Да, он предотвращает доступ таких функций, как file_get_contents и т.п., к чему-либо за пределами желаемого каталога. Но тогда я мог бы просто использовать exec ("cat / etc / passwd", $ res); или некоторые другие функции, которые делают аналогичные вещи.

Но, чтобы ответить на ваш вопрос, способ сделать это в PHP - добавить разрешенные папки, разделенные двоеточием. Например.

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