У меня есть веб-страница («research.php») со ссылками на файлы PDF и вы хотите отобразить отказ от ответственности («disclaimer.html»), прежде чем кто-либо увидит файлы. На данный момент я выполнил это, проверив значение HTTP_Referrer и перенаправляя, если это не из страницы отказа от ответственности.Проблемы с безопасностью с использованием HTTP_REFERRER
Код:
$ref = $_SERVER['HTTP_REFERER'];
if($ref !== 'http://my.site.com/disclaimer.html') {
die('<META HTTP-EQUIV="Refresh" CONTENT="0;URL=disclaimer.html">');}
Исследование страница содержит ссылки на PDF файлы, которые хранятся в отдельном каталоге, который ограничивается локальным доступом с помощью .htaccess. PDF-файлы обслуживаются скриптом PHP («download.php»), который также проверяет HTTP_Referrer.
Я понимаю, что переменная HTTP_Referrer может быть подделан, что делает этот метод небезопасный, и есть несколько вопросов:
Во-первых, это возможно для кого-то, чтобы связать непосредственно с другого сайта либо на странице исследований или сценарий загрузки и spoof HTTP_Referrer, чтобы их посетители могли обойти отказ от ответственности? Основываясь на different question, я понимаю, что HTTP_Referrer можно легко подделать на ПК пользователя, но сделать его для посетителя веб-сайта гораздо труднее?
Во-вторых, есть ли способы сделать скрипт download.php более безопасным, например, поместив его в каталог, ограниченный локальным доступом, используя .htaccess? Я в настоящее время вызываю скрипт, используя простую ссылку в форме «a href =» download.php? ... », поэтому я понимаю, что это не сработает - это правильно?
Любые комментарии оценены. Суть в том, что я хочу, чтобы было трудно/невозможно сослаться на страницы или файлы с другого веб-сайта, не указав отказ или без владельца этого веб-сайта, фактически хранящего PDF-файлы на своем веб-сайте. Без сомнения, какое-либо решение будет иметь определенные уязвимости но я пытаюсь понять, насколько сложно опытному веб-дизайнеру обойти страницу отказа от ответственности.
ОБНОВЛЕНИЕ: Ответ jszobody ниже четко показывает лучший способ сделать это и поэтому отвечает на вопрос - но я все еще интересно узнать сколько работы связано с спуфингом HTTP_REFERRER из ссылки на стороннем веб-сайте, если кто-нибудь может просто объяснить это.
Большое спасибо за это - я подумал о том, чтобы спуститься по этому маршруту, но задался вопросом, был ли HTTP_REFERRER более простым способом выполнить то, что я искал. Легко ли объяснить, почему использование сеансов - более безопасный способ сделать это? –
Поскольку внешние веб-сайты и пользователи не могут обманывать переменную сеанса.Только вы можете установить их. – jszobody
Кроме того, у меня уже есть скрипт download.php в том же духе, который вы предлагаете, но проверяете HTTP_REFERRER, а не используете сеансы. Необходимо/возможно защитить скрипт download.php, поместив его в каталог с ограниченным доступом? –