Лучший способ защитить паролем потоковое видео с использованием php / .htaccess. Они транслируются с использованием rtsp, но при необходимости я могу использовать другие форматы.
Я знаю, как делать аутентификацию с помощью php, но я не уверен, как настроить аутентификацию, чтобы защитить URL-адреса потоковых файлов, чтобы пользователь не мог просто скопировать URL-адрес и поделиться им.
Или я переусердствую это, и я могу просто использовать обычную схему проверки подлинности и поместить файлы в защищенный каталог?
На веб-серверах nginx и lighttpd есть заголовки X-Send-File, которые вы можете вернуть из PHP. Таким образом, вы можете делать свои проверки в PHP, а затем условно отлаживать файл.
if (check_user_can_access()){ header('X-sendfile: /path/to/file'); } else { header('HTTP/1.1 403 Fail!'); }
Lighttpd также имеет чистый модуль под названием mod_secure_download, который позволяет вам программно генерировать URL-адрес, который будет действителен только на короткий период времени.
Nginx и, возможно, lighttpd, позволяют вам ограничить скорость загрузки, поэтому вы не отправляете потоковые данные быстрее, чем можете их использовать.
В любом случае, вы хотите использовать свой веб-сервер для обслуживания файлов. Служить им через PHP возможно, но медленно.
Попытайтесь использовать сервис Amazon S3, у него есть свои причуды, но это имеет смысл, когда вы знакомы с ним.
В их API есть крючки, чтобы получить временные URL-адреса, которые активны в течение указанного времени, поэтому вы можете свободно показывать URL-адрес посетителю, потому что он не будет работать через 10 минут или позже.
Это почти тривиальное отношение к php (около 15 строк кода), на их форумах есть много примеров, поэтому вам не нужно идти с нуля и читать полную документацию о том, как этого добиться.
Какую авторизацию вы сделаете, прежде чем создавать и показывать ссылки, это зависит от вас.
Вы также можете выглядеть так, как будто он подан из вашего домена, например video.yourdomain.com, вместо стандартных URL-адресов s3.
Последняя вещь, это дешево – мы заплатили около 2 долларов США за месяц тестирования и развертывания, когда я загрузил 8 ГБ и загрузил его 3 раза полностью и инициализировал загрузку около 100 раз. Человек, для которого я делал это, настолько доволен ценой, что хочет переместить все свои загружаемые носители в s3.
Теперь, прочитав все, что я написал, он выглядит как коммерческий / спам, но я так доволен сервисом, потому что раньше я кодировал все для аудиофайлов, и потребовалось несколько дней, пока все не сработало нормально, и это заняло пару часов для реализации (в основном, получение знакомый с обслуживанием).
Вы можете взглянуть на: mod_xsendfile (для apache)
Это позволяет вам внутренне перенаправлять файл.
Таким образом, вы можете указать ссылку для скачивания на checkCredentials.php
<?php if ( isAuthorised($_POST['user'], $_POST['pass']) ) { header("X-Sendfile: $somefile"); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; file=\"$somefile\""); exit(0); } else { show403('bad credentials'); } ?>
Этот модуль также доступен для других веб-серверов. Если я правильно помню, идея первоначально исходит от lighttpd, но, как утверждает Джош, также доступна для nginx.
В решении Jacco можно проверить заголовки, найти URL-адрес файла и загрузить его без проверки подлинности?
Возможное решение, о котором я могу думать, – это поставить файлы somplace, недоступные для всех, кроме браузера, то есть используя .htaccess, запретить все. Будет ли это работать?
Во-первых, очень легко обмануть референта. Эта информация хранится в браузере пользователя, поэтому пользователь может просто подключиться к вашему серверу и предоставить свой собственный референт, который соответствует вашему домену.
Несколько вещей, которые вы могли бы попробовать:
Во-первых, более безопасный, но все же поддельный. mod_rewrite предоставляет возможность проверять файлы cookie. Что вы можете сделать, это установить cookie, когда пользователь посещает ваш сайт, содержащий некоторые неясные данные. Затем вы можете изменить свой RerwriteCond на что-то вроде этого:
RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_COOKIE} obscurename=obscurevalue [NC] RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC] RewriteRule \.(asx¦ASX)$ http://img.ruphp.com/php/f [R,L]
Другая, лучшая техника предполагает работу с PHP и mime-типами. Я не уверен, насколько это будет поддерживать потоковый контент, но я предполагаю, что он сработает. Что вы можете сделать, так это то, что все ваши видео ссылки указывают на файл .php (строка запроса определяет, какое видео было выбрано). Затем, когда пользователь пытается посетить эту ссылку, вы делаете что-то вроде этого:
<?php // You could also check some sort of session variable // that is set when the user visits another part of your // site if(!isLoggedIn()){ header("Location: errorPage.htm"); exit; }else{ // Get the name of the file specified $file = get_file_name($_GET['fileID']); // Specify the proper mime-type for the data you're sending // (this may have to change, depending on your situation) header("Content-type: video/vnd.rn-realvideo"); // Read the file and output it to the browser readfile($file); } ?>
Из того, что я читал, большинство серверов знают, какие типы mime представляют потоковые типы mime, поэтому браузер должен иметь возможность выяснить, как правильно обрабатывать потоковый файл.