Estoy tratando de asegurar un script de servicio de bytes, escrito en PHP, en su mayoría tomado de enlace para protegerse contra la vinculación directa del video y la descarga fácil. Por lo tanto, he colocado el video fuera de la raíz http pública. El pseudo-streaming en sí funciona perfectamente bien.
La estructura de las páginas es la siguiente:
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 clase Token
simplemente genera una cadena aleatoria, la guarda en la sesión php y la devuelve, respectivamente, cuando la comparación compara el parámetro con el token almacenado en $_SESSION
.
Con este método, tengo el problema de que algunos navegadores, como stock y chrome 47 en Android 4.1.2, parecen pasar la transmisión a un proceso diferente, por lo tanto, pierden el HTTP_REFERER
(posiblemente relacionado con el problema de Android 1780). Si desactivo el token al verificarlo, las solicitudes subsiguientes para media.php
get abortet. Lo mismo ocurre si configuro un límite de tiempo para el token.
Una vez ordenado, ocultaría el video y reflejaría su contenido en un lienzo.
¿Cuáles serían las medidas de seguridad adecuadas para proteger contra la descarga del archivo de video y hacer que media.php
sea inaccesible? Sé que no puede haber una protección absoluta, pero quiero hacerlo razonablemente difícil.
Editar: Tenga en cuenta que no estoy buscando algún tipo de DRM para el video, ya que sé que podría grabarse fuera de la pantalla. Estoy buscando formas de llevar el video a la página de videos de video, por lo que solo se puede acceder desde allí y evitar el enlace.