Я хочу создать простой сайт для загрузки, который будет генерировать временные URL-адреса для видеофайлов после ввода кода. Мне нужно защитить истинное местоположение файлов, поэтому они не могут быть hotlinked напрямую. URL-адрес, основанный на времени, который истекает через x минут, кажется лучшим вариантом, но Im не уверен в фактической реализации.
Какие-нибудь советы?
Сделайте свои URL следующим образом:
http://myvid.com/video?id=1×tamp=12341561234&hash=1203941h23jk479sdf87sdf
Где временная метка – временная метка unix, а хеш – это хеш md5, скажем, временной метки, прикрепленной к секретной строке на сервере.
Затем, когда вы воспроизводите это видео, проверьте, действительно ли поле метки времени (с использованием хэша), а затем проверьте, сколько лет прошло с меткой времени.
Егор, они используют Mod Rewrite. Поэтому, когда кто-то заходит на сайт http://www.domain.com/video/1234567890/theLongHashCode, вы пишете в .htaccess, что URL следует рассматривать как video.php? Timestamp = 12341561234 & hash = 1203941h23jk479sdf87sdf
Это позволяет предотвратить отображение фактического URL-адреса.
Некоторые источники по mod rewrite: 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 – это файл, который проверяет, существует ли хэш в базе данных или нет.
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);
Вы думали об использовании формы с методом 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-магии за пределами вашего обычного пользователя. Однако, чтобы еще раз убедиться, что изображение запускается только после щелчка, вы можете зарегистрировать идентификатор в сеансе и отметку времени, а затем проверить отметку времени при просмотре изображения.
Я бы рекомендовал не печатать весь файл через php, потому что он ресурсоемкий (даже fpassthru
). Существует еще один вариант – использование собственного скрипта для генерации пар temporary url
=> original url
с rewritemap prg . Но этот вариант следует использовать осторожно.