Как мне защитить MP4 и FLV видео - PullRequest
5 голосов
/ 05 июля 2011

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

Я слышал о маскировке URL-адресов, нопонятия не имею, как это сделать.Или есть другой способ?

По сути, видео будет храниться либо на удаленном сервере (vps), либо через Amazon S3, и сайт будет вызывать видео и передавать его в потоковом режиме, в JW-плеере или любом другом плеере.Я могу найти, что позволит мне защитить видео.

Кто-нибудь знает, как это сделать?Или знаете о сервисе, который сделает это для меня?

Спасибо

TT

1 Ответ

2 голосов
/ 06 сентября 2013

Я не знаю, почему так много людей дают неправильные советы, но да, вы можете сделать это.Тот факт, что он «проигрывается» на стороне клиента, не означает, что он будет сохранен на стороне клиента - вам придется использовать программное обеспечение, которое может записывать поток во время его воспроизведения.Либо программа для захвата экрана, либо что-то в этом роде.

В любом случае, для этого вам нужно использовать .htaccess для перенаправления файловых запросов в php-файл, который будет динамически обслуживать местоположение файла и скрывать URL-адрес.

Вам понадобится следующее в html-коде

<html>
<body>
<script type="text/javascript" src="flowplayer-3.2.12.min.js">
</script>
  <script type="text/javascript">
// <![CDATA[
  window.onload = function () {
    $f("player", "flowplayer-3.2.16.swf", {
      plugins: {
        secure: {
          url: "flowplayer.securestreaming-3.2.8.swf",
          timestampUrl: "sectimestamp.php"
        }
      },
      clip: {
        baseUrl: "secure", // Im using a folder called "secure" you can call it whatever you want
        url: "trailer.flv",
        urlResolvers: "secure",
        scaling: "fit",
        onStart: function (clip) {
          document.getElementById("info").innerHTML = clip.baseUrl + "/" + clip.url;
        }
      }
    });
  };
  // ]]>
  </script>

<div id="player"></div>

</body>
</html>

sectimestamp.php содержит только эту строку:

<?php
echo time();
?>

затем вам нужно написать свой файл .htaccessследующим образом и поместите его в вашу «безопасную» папку или там, где хранятся видео:

RewriteEngine on


RewriteRule ^(.*)/(.*)/(.*)$ video.php?h=$1&t=$2&v=$3

RewriteRule ^$ - [F]
RewriteRule ^[^/]+\.(flv|mp4)$ - [F]

Следующим шагом будет ваш файл video.php, который находится в том же каталоге, что и ваш .htaccess (вы можете поместитьв другом месте просто измените URL в .htaccess

<?php
$hash = $_GET['h'];
$streamname = $_GET['v'];
$timestamp = $_GET['t'];
$current = time();
$token = 'kljaslidilhal9023402'; // I recommend a dynamic token to be generated using something like mt_rand() function
$checkhash = md5($token . '/' . $streamname . $timestamp);

if (($current - $timestamp) <= 2 && ($checkhash == $hash)) {
  $fsize = filesize($streamname);
  header('Content-Disposition: attachment; filename="' . $streamname . '"');
  if (strrchr($streamname, '.') == '.mp4') {
    header('Content-Type: video/mp4');
  } else {
    header('Content-Type: video/x-flv');
  }
  header('Content-Length: ' . $fsize);
  session_cache_limiter('nocache');
  header('Expires: Thu, 19 Nov 1981 08:52:00 GMT');
  header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
  header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
  header('Pragma: no-cache');
  $file = fopen($streamname, 'rb');
  print(fread($file, $fsize));
  fclose($file);
  exit;
} else {
  header('Location: /secure');
}

?>

Это часть проверки, в которой токен проверяется против потока, чтобы убедиться, что он не старше 2 секунд - в противном случае вам придется обновитьстраницы и запросите новый токен.

Теперь все, что это делает, если вы пытаетесь получить доступ к url.com/secure/trailer.flv, вы не сможете, благодаря .htaccess (Менеджеры закачек тоже не будут работать).Но вы сможете транслировать это местоположение благодаря информации php на url.com/video.html, а источник в FLV-файле будет выглядеть как url.com/md5hashtimestamp/md5hashstreamname/md5hashtimestamp/trailer.flv.Таким образом, будет очень сложно скопировать поток непосредственно из флэш-файла, потому что этот URL не завершается;Вы не можете зайти на сайт напрямую по адресу url.com/secure/trailer.flv благодаря .htaccess;и, наконец, единственный вариант - это снимок экрана / программное обеспечение, которое записывает во время потоковой передачи.

Так что это не на 100% безопасно, но затрудняет работу конечного пользователя - и, самое главное, это бесплатно

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