Как запретить прямые ссылки на файлы на моем сайте

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

например, это адрес моего сайта:

http://sy-stu.org/stu/PublicFiles/StdLibrary/Exam.zip

когда кто-то нажимает на него, он начнет процесс загрузки напрямую.

5 ответов


Если вы используете PHP, у вас может быть скрипт, который связывает пользователя с загрузкой, но только если $_SERVER['HTTP_REFERER'] это с вашего сайта. Если это не вы перенаправляете на свой сайт.


ваш сайт размещен на веб-сервере Apache, поэтому вы должны иметь возможность сделать следующее в httpd вашего сайта.conf (или блок виртуального хоста)

RewriteEngine On
RewriteCond   %{HTTP_REFERER} !^$
RewriteCond   %{HTTP_REFERER} !^http://(www\.)?yourdomain\.com/  [NC]
RewriteRule   ^/PublicFiles/  /page-about-direct-links.html

это в основном говорит:

  1. включите движок mod_rewrite
  2. если HTTP-реферер не пуст...
  3. и не содержит моего доменного имени (С или без "www.")...
  4. перенаправление запросов при /PublicFiles/ с / страница-о-прямые ссылки.HTML-код

более подробную информацию о модуле mod_rewrite можно найти здесь: mod_rewrite - Apache HTTP Server


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

выполните веб-поиск для отправки файлов через cgi.

вот аккуратная ссылка, которую я нашел в интернете: здесь


почему бы просто не сделать ссылки динамическими и косвенными, например:

на странице X: (статическое)

<a href="Y">SuperNeat Program</a>

на странице Y: (динамически генерируется)

Click here to download 
<a href="Z.php?timestamp={timestamp}&counter={counter}&hash={hash}">
SuperNeat Program</a>

и заменить метку времени с текущим временем в msec с 1970 года, счетчик = счетчик, который вы увеличиваете один раз за загрузку, хэш = MD5 хэш конкатената(метка времени,счетчик,секретная соль), где секретная соль = любой любимый код, который вы держите в секрете.

затем на странице Z.php, вы просто пересчитываете хэш из счетчика и метки времени в строке запроса убедитесь, что он соответствует хэшу в строке запроса и что метка времени является последней (например, из предыдущих 30 минут или 60 минут или что-то еще). Если это так, то подайте файл, о котором идет речь. Если это не так, введите сообщение об ошибке. Это дает кому-то только короткий период времени для прямой ссылки на ваш файл. Если вы даже не хотите этого, то следите за значениями счетчика, полученными в Z.php строка запроса и не принимать их больше, чем однажды.


Я вообще не веб-эксперт, но я думал о следующем указателе -

Если вы используете asp.net могут ли обработчики http или модули, настроенные на уровне веб-сайта, помочь (много информации о тех, кто в Интернете, я недавно искал его для какой-то работы, вот один статьи например.

идея в том, чтобы перехватить запрос, прежде чем он достигнет конечного файла и перенаправить его на страницу, которую вы хотите показать, например - если кто-то хочет перейдите к URL, которые вы опубликовали ("http://sy-stu.org/stu/PublicFiles/StdLibrary/Exam.zip") перехватить этот вызов,используйте поиск, чтобы найти страницу, которую вы хотите отобразить и перенаправить запрос туда;я предполагаю, что пользователи по ссылке не слишком раздражало (если они не сделали "сохранить объект как", что позволит им экономить некоторые HTML и не на молнии).

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