Как предотвратить глубокую ссылку на файлы на моем сайте - PullRequest
10 голосов
/ 27 декабря 2008

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

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

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

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

Ответы [ 5 ]

19 голосов
/ 27 декабря 2008

Ваш сайт размещен на веб-сервере 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 Referrer не пустой ...
  3. И не содержит моего доменного имени (с или без «www.»)…
  4. Перенаправить любые запросы на что-либо в / PublicFiles / на /page-about-direct-links.html

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

16 голосов
/ 27 декабря 2008

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

11 голосов
/ 27 декабря 2008

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

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

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

1 голос
/ 27 декабря 2008

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

на странице 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>

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

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

0 голосов
/ 27 декабря 2008

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

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

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

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

...