Как создать временные URL для предотвращения хотлинкинга в php? - PullRequest
4 голосов
/ 11 февраля 2009

Я собираюсь создать простой сайт для загрузки, который будет генерировать временные URL-адреса для видеофайлов после ввода капчи. Мне нужно защитить истинное местоположение файлов, чтобы они не могли быть напрямую связаны. URL-адрес, основанный на времени, срок действия которого истекает через x минут, кажется лучшим вариантом, но я не уверен в реальной реализации.

Любые советы?

Ответы [ 5 ]

5 голосов
/ 11 февраля 2009

Сделайте ваши URL такими:

http://myvid.com/video?id=1&timestamp=12341561234&hash=1203941h23jk479sdf87sdf

Где timestamp - это метка времени unix, а hash - это хэш md5, скажем, метки времени, добавленной к секретной строке на сервере.

Затем, когда вы воспроизводите это видео, проверьте, является ли поле отметки времени действительным (используя хэш), а затем проверьте, сколько лет отметке времени.

3 голосов
/ 11 февраля 2009

Егор, они используют Mod Rewrite. Поэтому, когда кто-то входит www.domain.com/video/1234567890/theLongHashCode Вы пишете в .htaccess, что URL должен рассматриваться как video.php? timestamp = 12341561234 & hash = 1203941h23jk479sdf87sdf

Это позволяет вам не показывать фактический URL.

Некоторые источники при переписывании модов: http://www.modrewrite.com/

То, что вам нужно было бы поместить в файл .htaccess, учитывая, что на Apache включен модуль mod_rewrite:

RewriteEngine On
RewriteRule ^video/([0-9]+)/(.*)  video.php?timestamp=$1&hash=$2

Это принимает только 2 значения: метка времени и хэш. Идентификатор видео не отправлен. Я бы даже не отправил метку времени. Для временного URL я только генерирую хеш, сохраняю его в базе данных вместе с отметкой времени. Поэтому, когда кто-то посещает URL, я просматриваю хеш из базы данных. Если хеш существует, тогда я сравниваю метку времени из базы данных с текущим временем, и если она находится в пределах указанного времени, то URL считается действительным, в противном случае он недействителен, и пишу на страницу «Срок действия этой ссылки истек».

Так что я бы выглядел как URL: http://hsbsitez.com/video/thehashcodehere

Со следующим файлом .htaccess для интерпретации этого URL.

RewriteEngine On
RewriteRule ^video/(.*)  video.php?hash=$1  

Где video.php - это файл, который проверяет, существует ли хеш в базе данных или нет.

1 голос
/ 25 июня 2013
header('Content-Type: application/force-download');

$fileee = 'filename.zip';
$file_Location = "/..yourfolder/" . $fileee;

header('Content-Length:' . filesize($file_Location));
header("Content-Disposition: inline; filename=\"".$fileee."\"");

$file_Pointer = fopen($fileLocation,"rb");
fpassthru($file_Pointer);
0 голосов
/ 19 апреля 2015

Я бы рекомендовал не печатать весь файл через php, потому что он потребляет много ресурсов (даже fpassthru). Есть еще один вариант - использовать собственный скрипт для генерации пар temporary url => original url с rewritemap prg . Но этот вариант следует использовать осторожно.

0 голосов
/ 11 февраля 2009

Используйте ФОРМУ с методом, установленным как PUT

Задумывались ли вы об использовании формы с методом PUT? Это как раз тот случай, для которого предназначен PUT - невозможность повторного просмотра страницы с тем же URL-адресом. Просто создайте простую форму с несколькими скрытыми полями, и вы можете создать ссылку на JavaScript, которая ее отправит. Таким образом, вам не нужно беспокоиться о пользователях, пытающихся пересмотреть ссылки или имеющих ссылки в своей истории.

Пример:

<form id="myform" method="put" action="viewimage.php">
<input type="hidden" name="id" value="uniquevalue" />
<input type="hidden" name="filename" value="foo.jpg" />

<a href="javascript:myFunctionToInvokeSumit()">Image foo.jpg</a>
</form>

На первый взгляд, никто не сможет вернуться к изображению без необходимости использовать магию HTTP вне вашего обычного пользователя. Однако для дальнейшей проверки того, что изображение запускается только после щелчка, вы можете зарегистрировать идентификатор в сеансе и поставить его метку времени, а затем проверить его по метке времени при просмотре изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...