2011-07-05 4 views
5

Pracuję nad witryną tylko dla członków i muszę zabezpieczyć adresy URL filmów, które będą dostępne na tej stronie, aby nie można było ich udostępniać ani przekazywać osobom niebędącym członkami.Jak zabezpieczyć film wideo mp4 i flv

Słyszałem o maskowaniu adresów URL, ale nie mam pojęcia, jak to zrobić. A może jest inny sposób?

Zasadniczo filmy wideo będą przechowywane na serwerze zdalnym (vps) lub przez Amazon S3, a strona będzie je wywoływać i przesyłać strumieniowo w odtwarzaczu strumieniowym, odtwarzaczu JW lub innym odtwarzaczu, który znajdę, co pozwoli mi zabezpiecz wideo.

Czy ktoś wie, jak to zrobić? Lub znasz usługę, która zrobi to za mnie?

Dzięki

TT

+0

porno? przepraszam, musiałem zapytać :-) –

+0

Jeśli mogą przesłać strumieniowo na swój komputer, to można zapisać strumień w taki czy inny sposób. Wtedy mogą być dystrybuowane tak, jak im się podoba. DRM ma ogromną historię porażki. – Raoul

+0

Co powiedział pan Duke, jeśli gra się po stronie klienta, można go zapisać po stronie klienta. Nie da się tego obejść.Jednak możesz to zabezpieczyć, aby tylko członkowie mieli dostęp do filmów w pierwszej kolejności, czy to jest twoje pytanie? A może mógłbyś napisać własnego gracza, który odrzuciłby wideo w pamięci, a zatem mógł być odtwarzany tylko w twoim odtwarzaczu (chyba, że ​​ktoś go przechwycił, oczywiście, lub odwrotnie zaprojektował twój klucz kryptograficzny). –

Odpowiedz

2

Nie wiem, dlaczego tak wielu ludzi daje złą radę, ale tak można to zrobić. To, że jest "grana" po stronie klienta, nie oznacza, że ​​będzie ona zapisana po stronie klienta - trzeba by użyć oprogramowania, które może nagrywać strumień w trakcie jego odtwarzania. Oprogramowanie do przechwytywania ekranu lub coś podobnego.

W każdym razie, aby to zrobić, musisz użyć .htaccess, aby przekierować żądania plików do pliku php, który dynamicznie wyświetli lokalizację pliku i zaciemni adres URL.

Potrzebne będą następujące w kodzie 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 ma tylko tej linii w nim:

<?php 
echo time(); 
?> 

Następnie trzeba napisać plik .htaccess w następujący sposób i miejsce w swoim "bezpiecznym" folderze lub wszędzie tam, gdzie przechowywane są filmy:

RewriteEngine on 


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

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

Kolejny krok to jo ur plik video.php który jest w tym samym katalogu, co plik .htaccess (można go umieścić gdzie indziej po prostu dostosować url w .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'); 
} 

?> 

To jest część walidacji gdzie znacznik jest porównywane do strumienia upewnij się, że nie trwa dłużej niż 2 sekundy - w przeciwnym razie musisz odświeżyć stronę i poprosić o nowy token.

Teraz wszystko, co to robi, to próba dostępu do strony url.com/secure/trailer.flv, której nie będziesz w stanie uzyskać dzięki .htaccess (menedżerowie pobierania również nie będą działać). Możesz jednak przesyłać strumieniowo tę lokalizację, korzystając z informacji o php na url.com/video.html, a źródło w pliku FLV będzie wyglądało jak url.com/md5hashtimestamp/md5hashstreamname/md5hashtimestamp/trailer.flv. Tak więc bardzo trudno zgrać strumień z pliku Flash bezpośrednio, ponieważ ten URL nie kończy się; nie można odwiedzić witryny bezpośrednio pod adresem url.com/secure/trailer.flv dzięki .htaccess; i ostatecznie jedyną opcją jest przechwytywanie ekranu/oprogramowanie, które rejestruje podczas przesyłania strumieniowego.

To nie jest w 100% bezpieczne, ale utrudnia to użytkownikowi końcowemu - a najlepsze jest to, że jest ono bezpłatne: