Sto cercando di proteggere uno script di byte serving, scritto in PHP, per lo più preso da link per proteggere dal collegamento diretto del video e dal download semplice. Pertanto ho posizionato il video all'esterno della http-root pubblica. Lo pseudo-streaming funziona perfettamente alla perfezione.
La struttura delle pagine come questa:
mysite.com/watchvideo.php:
<video>
<source src="/media.php?t=<?= $t = Token::generate(); ?>" type="video/mp4">
</video>
mysite.com/ media.php:
$token = isset($_GET["t"]) ? $_GET["t"] : "";
if (
!Token::check($token)
|| $_SERVER["HTTP_REFERER"] !== "mysite.com/watchthisawesomevideo.php"
) {
header("HTTP/1.1 403 Forbidden");
exit;
}
do_the_byte_range_stuff(); // from tuxxin.com
La classe Token
genera semplicemente una stringa casuale, la salva nella sessione php e la restituisce, rispettivamente, quando verifica il confronto del parametro con il token memorizzato in $_SESSION
.
Con questo metodo ho il problema che alcuni browser, come stock e chrome 47 su Android 4.1.2, sembrano passare lo streaming ad un processo diverso, perdendo quindi il HTTP_REFERER
(possibilmente correlato: Android 1780). Se disattivo il token al momento del controllo, le richieste successive a media.php
vengono annullate. Lo stesso vale se imposto un limite di tempo per il token.
Una volta ordinato, nasconderei il video e ne rispecchi il contenuto su una tela.
Quali sarebbero le misure di sicurezza idonee per proteggere dal download del file video e rendere media.php
inaccessibile? So che non può esserci protezione assoluta, ma voglio renderlo ragionevolmente difficile.
Modifica: Tieni presente che non sto cercando alcuna forma di DRM per il video poiché so che potrebbe essere semplicemente registrato dallo schermo. Sto cercando dei modi per ottenere il video sulla pagina di videovideo rendendolo accessibile solo da lì e impedendo il collegamento a caldo.