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

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

Вопрос

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

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

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

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

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

Решение

Если вы используете 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/ на /page-about-direct-links.html.

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

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

Выполните поиск в Интернете для отправки файлов через CGI.

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

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

на странице Х:(статический)

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

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

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

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

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

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

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

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

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

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