Защита медиафайлов от скачивания

Преамбула
Иногда появляется необходимость защитить файлы не только от hotlink`а, но и от прямого просмотра в браузере. Классический пример – видеогалерея: юзеру разрешаем смотреть фильм, но запрещаем его скачивать (ибо нефиг, пусть ходит к нам и смотрит, тратит свой трафик и накручивает нам счетчик! :) ). Особо рьяные и грамотные (ну очень хочется ему с*****ь данный ролик), просмотрев html-код увидят ссылку, по которой браузер тянет фильмец, скопируют ее и скормят wget`у/FlashGet`у/просто вставят в адресную строку браузера и все, наш суперфильм ушел гулять по интернетам. Но! Включив моск, можно сильно затруднить копипастерам жизнь. :) И большинство из них уйдет не солонно хлебавши.

Ну-с, приступим.

Дано: 1 файл filische.flv, который лежит в директории /wwwroot/MediaLibraries/videos/filische.flv

Надо:

  • показать фильм юзеру
  • не дать скачать фильм к юзеру на комп

Собственно, сам алгоритм:

  • Запрещаем к просмотру файлы по маске. В данном случае это *.flv и *.mp4:
    в файле .htaccess, который находится в корневой директории пишем:

    1. <Files ~ «\.(flv|mp4)»>
    2. order allow,deny
    3. deny from all
    4. </Files>
  • Создаем файл, который будет обрабатывать запросы на выдачу медиафайлов. В моем примере это файл /wwwroot/output/stream/media_handler.php. Код media_handler.php:
    1. header(«Content-type: video/mp4″); //говорим браузеру, что мы ни фига не пхп-фaйл, а видео;
    2. $output_file=readfile($_SERVER['DOCUMENT_ROOT'].»/wwwroot/MediaLibraries/videos/filische.flv»); //читаем файл;
    3. print $output_file; //помещаем прочитанный файл в поток
  • Создаем еще один .htaccess, который будет запрещать обращение к файлу /wwwroot/output/stream/media_handler.php через браузер. Ибо если media_handler.php будет доступен из браузера, то все сделанное выше не имеет никакого смысла:
    1. order allow,deny
    2. deny from all
    3. allow from <ваш_айпи_сервера> // важный момент: этой директивой мы говорим, что обращаться к файлу media_handler.php можно только с нашего сервера. Т.е. $_SERVER['REMOTE_ADDR'] при обращении к media_handler.php должен == <ваш_айпи_сервера>
  • Кладем только что созданный .htaccess в директорию /wwwroot/output/stream/ – его действие должно распространяться только на media_handler.php
  • Ну и непосредственно демонстрация нашего видео:
    1. print "<object width='260' height='195' data='/swf/uppod.swf' type='application/x-shockwave-flash' id='videoplayer'>";
    2. print «<param name=’bgcolor’ value=’#000000′>»;
    3. print «<param name=’allowFullScreen’ value=’true’>»;
    4. print «<param name=’allowScriptAccess’ value=’always’>»;
    5. print «<param name=’wmode’ value=’opaque’>»;
    6. print «<param name=’movie’ value=’/swf/uppod.swf’>»; //путь к плееру. Я использую uppod, неплохой плеер. Разработан нашими разработчиками, кстати ;) Сайт разработчиков uppod.ru
    7. print «<param name=’flashvars’ value=’m=video&amp;file=/wwwroot/output/stream/media_handler.php&amp;poster=/path/to/poster.jpg’>»;
    8. print «</object>»;

Собственно все. Видео демонстрируется юзеру, юзер скачать не может, ибо посылается на 403 :)

Запись опубликована в рубрике Защита от скачивания с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий