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