Скачать Апач:Перед загрузкой убедитесь, что страница была просмотрена

StackOverflow https://stackoverflow.com/questions/54669

Вопрос

Работа под рукой:

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

Есть ли какие-нибудь предложения, которые лучше моей идеи отправить файл cookie и - перед началом загрузки - проверить, существует ли файл cookie (через .htaccess)?

Веб-страница и файлы для загрузки будут расположены на разных серверах.

Среда:

  • Apache 2 на всех машинах
  • PHP 5 на всех машинах
  • MySQL 5 доступен на сервере «веб-страницы» (нет доступа с серверов загрузки)

Натан спросил, в чем проблема, которую я пытаюсь решить, и на самом деле я хочу запретить использование горячих ссылок, например, на форумах.Если люди скачивают с нашего сервера, используя нашу пропускную способность, я хочу показать им страницу с рекламой до начала загрузки.Это не обязательно должно быть полностью безопасно, но нам нужно заработать немного денег для финансирования серверов, верно?:)

Это было полезно?

Решение 6

я собираюсь использовать mod_auth_token чтобы убедиться, что у пользователя есть «последняя ссылка».

С помощью mod_auth_token вы можете создавать ссылки с истекающим сроком действия, т.е.если кто-то решит использовать существующую ссылку и опубликовать ее на другом веб-сайте, срок действия этой ссылки истечет через определенное время.Это приведет к ошибке 403 FORBIDDEN, которую я смогу перехватить и перенаправить пользователя на нужную HTML-страницу.

Другие советы

Вместо того, чтобы разрешать горячую ссылку на файлы, храните их за пределами доступного через Интернет маршрута.Вместо этого отправляйте запросы на загрузку в PHP-скрипт, который инициирует загрузку.Вы можете установить проверки, чтобы гарантировать, что запрашивающая страница была именно той, которую вы хотели прочитать.

Это можно сделать с помощью Apache mod_rewrite RewriteRule.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://www.example.com/page.html$
RewriteRule file.exe http://www.example.com/page.html [R=301,L]

В принципе, если запрос на file.exe не пришел с page.html в качестве реферера он 301 перенаправит пользователя на page.html.

Вы могли бы использовать распределенная серверная часть сеансы вместо файлов cookie, но это, вероятно, больше проблем, чем пользы.

Вы также можете запретить доступ на запросы без реферера или с неправильным реферером.Но это еще более фальшиво, чем печенье.

Это будет зависеть от того, насколько вы заботитесь.

Решение здесь зависит от проблемы, которую вы пытаетесь решить.Если вы просто пытаетесь убедиться, что прямая ссылка не публикуется на форумах и тому подобном, то простой проверки реферера с помощью .htaccess должно быть достаточно.Конечно, реферера можно достаточно легко подделать, поэтому, если риск того, что кто-то сделает это, является проблемой, вам придется сделать что-то еще.

Файл cookie поможет вам, если вам нужно что-то более безопасное.Мы не можем просто использовать сеансы PHP, потому что файловый сервер и веб-сервер находятся на разных компьютерах.Но мы могли бы создать файл cookie на основе хеша времени и некоторого секретного значения.

cookievalue = sha1('secretvalue'.date('z-H'));

Когда пользователь запрашивает реальный файл, файловый сервер снова генерирует этот файл cookie и проверяет, соответствует ли он пользователям.Это означает, что даже если пользователь подделает файл cookie, он станет недействительным через час, так что кого это волнует, и он не сможет создать свой собственный новый файл, потому что он не знает секретного значения.

Я собирался предложить трюк с рефералом .htaccess, но это не очень безопасный метод.Создать PHP-скрипт с добавлением пользовательской http-ссылки несложно.Если вы войдете на страницу загрузки, он подумает, что вы пришли с этой страницы.

Это актуальная проблема?Можете ли вы рассказать что-нибудь о контексте вашей страницы загрузки?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top