За последние 24 часа нас посетили 22770 программистов и 1253 робота. Сейчас ищут 825 программистов ...

Как запретить доступ к странице?

Тема в разделе "PHP для новичков", создана пользователем Mavili, 28 апр 2019.

Метки:
  1. Mavili

    Mavili Новичок

    С нами с:
    25 ноя 2018
    Сообщения:
    12
    Симпатии:
    0
    Есть footer.php и index.php. В index я подключаю footer
    PHP:
    1. require($_SERVER['DOCUMENT_ROOT'].'/private/footer.php');
    Нужно запретить доступ к файлу footer (403), но если перенаправлять с страницы футера на ошибку 403, то будет перенаправляться и в index'e. Как запретить доступ к footer, но чтобы в index не перенаправляло?
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Ты мог бы поместить footer.php и все подобные файлы за пределами DOCUMENT_ROOT. Взрослые фреймворки по-умолчанию работают с такой структурой:
    Код (Text):
    1. ProjectRoot
    2. |
    3. +-- app    - здесь функции и классы
    4. |
    5. +-- view   - здесь "хидеры", "футеры" и прочий вывод текста
    6. |
    7. +-- public - здесь "индекс", эта папка соответствует DocumentRoot веб-сервера
    к тому, что лежит вне public невозможно обратиться напрямую из браузера, оно только может инклудиться из скрипта(ов) в public. то, что ты просил.

    --- Добавлено ---
    P.S. Даже если ты не сделаешь такую ^^^ структуру, замени все
    require($_SERVER['DOCUMENT_ROOT']
    на
    require(__DIR__

    потому что $_SERVER['DOCUMENT_ROOT'] существует только в web, а если ты когда-нибудь начнешь пользоваться консолью (например использовать cron), получишь ошибку.
     
    Mavili нравится это.
  3. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    @artoodetoo предложил, конечно, самый лучший вариант. Тем не менее, есть ещё способы ограничить через настройки сервера (в случае Apache можно использовать .htaccess)
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Можно также в index создавать константу, а в остальных файлах в самом начале проверять if defined()

    Так сделано в старых проектах, но это костыль, как ни крути.
     
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @artoodetoo то есть, если в конфиге прописано

    PHP:
    1. root /var/www/htm/public;
    то в корень html, уже не попасть?
     
  6. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Ты столько времени чегой-то там программируешь на Laravel, и ещё не осознал этот факт?
    --- Добавлено ---
    Только надо уточнить, что не попасть именно через внешний запрос к веб-серверу. Внутри сервера попасть можно. Если получится закачать и запустить шелл, то шеллу, который работает на сервере, будет доступно всё то же, что и скриптам сайта.
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Можно и фронт убрать из корня и полностью запретить в нем выполнение скриптов.
    --- Добавлено ---
    Корнем все же принято называть public, а его надкаталог можешь называть, например, каталогом сайта.
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    @Dimon2x если в конфиге nginx прописана такая директива:
    Код (Text):
    1. root /var/www/htm/public;
    то корень сайта или "document root" находится в /var/www/htm/public,
    а корень проекта [ можно поместить ] в /var/www/htm, так наверное будет звучать понятней.

    видимая в браузере часть проекта будет в под-папке public. весь проект — в htm. понял? :)
     
  9. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @artoodetoo ну я знаю, что сейчас у меня корень запуска скриптов из паблика, а все файлы лежат за пабликом
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Что значит корень запуска скриптов?
    Я твои термины не понимаю и подозреваю худшее :)
    --- Добавлено ---
    В какой папке у тебя composer.json? -- Это и есть папка проекта. В ней, обычно находится под-папка public. И этот public обычно объявлен как root в nginx или DocumentRoot в Apache.
    У тебя так?
     
  11. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @artoodetoo в html
    --- Добавлено ---
    да так