Во всех мануалах по установке php-fpm сказано, что небезопасно оставлять настройку fix_pathinfo включенной. То есть надо делать Код (PHP): cgi.fix_pathinfo=0 Но если её выключить, то $_SERVER['PHP_SELF'] становится пустым. Внезапно я столкнулся с тем, что сторонний скрипт использует PHP_SELF и начинаются глюки. Скрипт менять нежелательно. Как выкрутиться с настройками? Видел рекомендации включить fix_pathinfo, но при этом установить Код (PHP): security.limit_extensions = .php тут я уже совсем плыву и не знаю чему верить. Решает ли это проблемы с безопасностью?
Вопрос в том, как оставить PHP_SELF, а не в том что изменить в скрипте. Не мой скрипт и он должен обновляться. Добавлено спустя 9 минут 53 секунды: Выкрутился так: убедился, что SCRIPT_NAME содержит то же самое значение, нашел где он ставится в параметрах nginx — fastcgi.conf — и продублировал: Код (PHP): fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param PHP_SELF $fastcgi_script_name;
Упс! На виртуалке с PHP 7 сработало, но на продакшене с PHP 5 нет! Денис, я это и пытаюсь сделать. На 5.6 не работает. АКТУАЛЬНО
Up. Добавил ссылку про limit_extensions. Конкретизирую вопрос: достаточно ли этого чтобы и рыбку съесть и нувыпоняли? Добавлено спустя 2 минуты 59 секунд: В идеале я бы хотел получить пример, демонстрирующий уязвимость для fix_pathinfo и убедиться, что она перестаёт существовать при limit_extensions.
$_SERVER['PHP_SELF'] = 'что-нибудь'; Добавлено спустя 1 минуту 45 секунд: какая вообще в этой штуке радость, когда есть __FILE__, __DIR__ и прочая?
@Ganzal, наверное можно. Годится как запасной вариант. [оффтопик]Но это даже хуже чем if file_exists для страницы "ведутся работы" [/оффтопик] Добавлено спустя 1 минуту 46 секунд: Я бы предпочёл решить вопрос через конфиги nginx и php. Один раз для всех виртуальных хостов. Добавлено спустя 7 минут 11 секунд: Nginx pitfalls: https://www.nginx.com/resources/wiki/start/topics/tutorials ... sts-to-php - несколько решений уязвимости, и fix_pathinfo только один из рецептов. Я выберу из оставшихся. Осталось набросать "тест" для их проверки и опубликовать в виде gist Всем спасибо!
ты багтрекер их читал? вот например https://bugs.php.net/bug.php?id=55208 - говорят что при выключенном фиксе можно продублировать значение REQUEST_URI. попробуй запихнуть нужную строку в /etc/nginx/fastcgi_params или где оно у тебя там и всё будет по идее ок и по идее же сервер-вайд
@Ganzal, я с этого начал. Выше описал как я справился. Но решение с cgi-параметрами работает для php7 и НЕ работает в php5.6. Как-то оно хитрее формирует PHP_SELF.