Как предотвратить глубокие ссылки на файлы на моем сайте
Вопрос
У меня есть веб-сайт, на котором можно скачать множество бесплатных программ.Проблема, с которой я сталкиваюсь, заключается в том, что люди со всего мира принимают прямые ссылки файлов (например, файлов .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
Это в основном говорит:
- Включите движок mod_rewrite.
- Если HTTP-реферер не пуст…
- И не содержит моего доменного имени (с www. или без него)…
- Перенаправляйте любые запросы к чему-либо в /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).
Однако в моем плане есть некоторая «дыра» — как на самом деле предоставить ссылку, которая будет работать с вашей собственной страницы?Я считаю, что вы можете различать запросы, поступающие с вашего веб-сайта, и запросы, поступающие с других, которые вы можете проверить в обработчике/модуле, исследуя объект запроса.