За последние 24 часа нас посетили 18046 программистов и 1664 робота. Сейчас ищут 1406 программистов ...

Ускользающая PHP_SELF

Тема в разделе "Настройка веб-сервера", создана пользователем artoodetoo, 8 янв 2016.

  1. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.116
    Симпатии:
    1.244
    Адрес:
    там-сям
    Во всех мануалах по установке php-fpm сказано, что небезопасно оставлять настройку fix_pathinfo включенной. То есть надо делать
    Код (PHP):
    1. cgi.fix_pathinfo=0
    Но если её выключить, то $_SERVER['PHP_SELF'] становится пустым. Внезапно я столкнулся с тем, что сторонний скрипт использует PHP_SELF и начинаются глюки. Скрипт менять нежелательно.

    Как выкрутиться с настройками? Видел рекомендации включить fix_pathinfo, но при этом установить
    Код (PHP):
    1. security.limit_extensions = .php
    тут я уже совсем плыву и не знаю чему верить. Решает ли это проблемы с безопасностью?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    REQUEST_URI никто не отбирал же
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.116
    Симпатии:
    1.244
    Адрес:
    там-сям
    Вопрос в том, как оставить PHP_SELF, а не в том что изменить в скрипте. Не мой скрипт и он должен обновляться.

    Добавлено спустя 9 минут 53 секунды:
    Выкрутился так: убедился, что SCRIPT_NAME содержит то же самое значение, нашел где он ставится в параметрах nginx — fastcgi.conf — и продублировал:
    Код (PHP):
    1. fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    2. fastcgi_param  PHP_SELF           $fastcgi_script_name; 
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    да, не успел тебе помочь, извини))))
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Может через вебсервер и ENV подшаманить
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.116
    Симпатии:
    1.244
    Адрес:
    там-сям
    Упс! На виртуалке с PHP 7 сработало, но на продакшене с PHP 5 нет!

    Денис, я это и пытаюсь сделать. На 5.6 не работает.

    АКТУАЛЬНО
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.116
    Симпатии:
    1.244
    Адрес:
    там-сям
    Up.
    Добавил ссылку про limit_extensions. Конкретизирую вопрос: достаточно ли этого чтобы и рыбку съесть и нувыпоняли?

    Добавлено спустя 2 минуты 59 секунд:
    В идеале я бы хотел получить пример, демонстрирующий уязвимость для fix_pathinfo и убедиться, что она перестаёт существовать при limit_extensions.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    задай её до скрипта сам вручную
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.116
    Симпатии:
    1.244
    Адрес:
    там-сям
    Как именно?
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    $_SERVER['PHP_SELF'] = 'что-нибудь';

    Добавлено спустя 1 минуту 45 секунд:
    какая вообще в этой штуке радость, когда есть __FILE__, __DIR__ и прочая?
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.116
    Симпатии:
    1.244
    Адрес:
    там-сям
    Это не мой скрипт. Если я внесу изменения, придётся их делать каждый раз после обновления.
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а автопрепенд тебе может объявить этот индекс основываясь на других переменных?
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.116
    Симпатии:
    1.244
    Адрес:
    там-сям
    @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 :)

    Всем спасибо!
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ты багтрекер их читал? вот например https://bugs.php.net/bug.php?id=55208 - говорят что при выключенном фиксе можно продублировать значение REQUEST_URI. попробуй запихнуть нужную строку в /etc/nginx/fastcgi_params или где оно у тебя там и всё будет по идее ок и по идее же сервер-вайд
     
  15. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.116
    Симпатии:
    1.244
    Адрес:
    там-сям
    @Ganzal, я с этого начал. Выше описал как я справился. Но решение с cgi-параметрами работает для php7 и НЕ работает в php5.6. Как-то оно хитрее формирует PHP_SELF.