Запретить доступ к определенным файлам на сервере

0

У меня есть система подписки на рассылку новостей, и я хотел бы запретить доступ к некоторым файлам (например, сценарию, который подписывается на пользователя). Проблема, с которой я столкнулся, заключается в том, что мне нужно запретить доступ к файлам для всех, кто приходит извне, но сценарии должны иметь доступ друг к другу.

Например, у меня есть следующие файлы:

  • index.html
  • subscribe.php

Невозможно получить доступ к subscribe.php, набрав соответствующий URL-адрес. Тем не менее, index.html должен иметь возможность отправлять данные, которые были введены в форму для subscribe.php.

Вот что я пробовал до сих пор:

Я оставил index.html в корневом каталоге и переместил subscribe.php в папку/ограничен. Я добавил файл.htaccess в папку ограниченным. .htaccess содержит только: deny from all

Это дает мне ошибку 403, когда я пытаюсь получить доступ к subscribe.php через URL-адрес, но он также дает мне ту же ошибку, когда я отправляю форму в index.html

Мой вопрос: что мой файл.htaccess должен выглядеть как архив, что я хочу, и почему то, что я пытался, не работает?

Теги:
.htaccess

1 ответ

0
Лучший ответ

Проблема, с которой я столкнулся, заключается в том, что мне нужно запретить доступ к файлам для всех, кто приходит извне, но сценарии должны иметь доступ друг к другу.

Вы ошибаетесь; что не соответствует тому, что вы говорите позже:

Проблема, с которой я столкнулся, заключается в том, что мне нужно запретить доступ к файлам для всех, кто приходит извне, но сценарии должны иметь доступ друг к другу.

вы не отправляете форму; клиентский браузер отправляет форму с помощью веб-запроса. Не думайте об этом так:

index.html должен иметь возможность отправлять данные, которые были введены в форму для subscribe.php.

Это не то, что происходит. index.html содержит html, который при визуализации в браузере клиента указывает браузеру, где и как подать регистрационную форму.

Есть несколько вещей, которые вы могли бы попробовать:

  • Формы обычно отправляются с запросом POST. Вы можете написать subscribe.php чтобы блокировать запросы GET и ожидать получения соответствующей информации о форме
  • Заголовок Referer [sic] можно проверить, чтобы убедиться, что ссылка на веб-страницу действительно является вашим "index.html"; но следует предупредить, что это, как и любой HTTP-заголовок с известным значением, тривиально подделывать.
  • Сессии PHP можно использовать для отслеживания клиентского доступа index.html перед отправкой формы отправки. PHP-сессии (обычно) используют куки файлы клиента для хранения токена сеанса, который затем ассоциируется на стороне сервера с хешем информации, хранящейся в кеше файла или сессии. Когда программа запрограммирована хорошо, клиент никогда не имеет доступа к этим данным и поэтому сможет получить только переменную сеанса "HasVisitedIndex" или любую другую, если вы установите ее для них в сеансе.

Вероятно, есть и другие решения, но, как вы видите, ни один из них не является полной версией slam-dunk из-за модели HTTP-сервера без состояния.

  • 0
    Я понимаю, что мой метод не работает, потому что клиентский браузер всегда должен иметь доступ к сценарию?
  • 0
    Да. Доступ к subscribe.php по сути такой же, как и к index.html, или к любому другому HTTP-ресурсу. Клиент получает доступ к ресурсу, и ваш PHP запускается на сервере для рендеринга страниц, обработки входных данных, таких как регистрация, доступ к базам данных и т. Д., Все из которых завершается, прежде чем результат затем отправляется обратно клиенту в виде HTTP-ответа.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню