Bloquear archivos mp4

  • Autor Autor Bakor
  • Fecha de inicio Fecha de inicio
Bakor

Bakor

Delta
Verificación en dos pasos activada
Verificado por Whatsapp
Buen día, tengo una web la cual esta hecha en php, en la cual estoy poniendo archivos mp4 y de ahí los pongo en una app por medio de una api, pero me he dado cuenta que se pueden sacar los enlaces de los vídeos que pongo, me gustaría saber si puedo bloquear eso, lo he hecho desde htaccess pero no me funciona, al sacar el enlace del video y ponerlo en algún reproductor como vlc funcionan, no bloquea el hotlinking me gustaría saber si hay otra opción para hacer esto.

el código que uso en htaccess es este

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://miweb.com*/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://miweb.com*$ [NC]
RewriteRule .*\.(mp4|jpg|jpeg|gif|png|bmp|zip)$ https://miweb.com/videohl.mp4 [NC,R,L]
 
Insertar CODE, HTML o PHP:
<filesMatch "\.(?i:mp4)$">  
Order Deny,Allow
Deny from all
</filesMatch>

No tengo ni idea si esto lo va a denegar en algún reproductor tu prueba :distant:
 
Gracias por la respuesta, ya la probe pero sigue sin funcionar incluso en el navegador si pongo un enlace de un video mp4 que tengo lo abre, no me marca error ni nada, solo me envia directo al video.
 
A mi me lo bloquea sin problemas.

Intenta borrar todo tu htaccess y prueba de nuevo.

También intenta de cerrar y volver abrir el navegador si te sigue sin funcionar.
 
Gracias por la respuesta, ya la probe pero sigue sin funcionar incluso en el navegador si pongo un enlace de un video mp4 que tengo lo abre, no me marca error ni nada, solo me envia directo al video.

Podrías hacer un PHP que tenga cabeceras de MP4, y el contenido lo tome del verdadero video.

Y dependiendo de ciertas condiciones lo muestras o no, y ya que estamos un lindo token. :encouragement:
 
Podrías hacer un PHP que tenga cabeceras de MP4, y el contenido lo tome del verdadero video.

Y dependiendo de ciertas condiciones lo muestras o no, y ya que estamos un lindo token. :encouragement:

La verdad no soy programador, si tu hicieras lo que me comentas cuanto me cobrarias por hacerlo.
 
La verdad no soy programador, si tu hicieras lo que me comentas cuanto me cobrarias por hacerlo.

funcVideo.php
PHP:
<?php
function getVideoURL($n){
	$ip = $_SERVER['HTTP_CF_CONNECTING_IP'] OR $ip = $_SERVER['REMOTE_ADDR'];  
	$key = 'KEYPERSONAL';
	$token = md5($n.$ip.$key);
	return "http://www.tuweb.com/getVideo.php?mp4=$n&token=$token";
}
?>
(Este archivo lo debes llamar al PHP que mostrará la URL del video)

Ejemplo:
PHP:
<?php
require_once('funcVideo.php');
echo 'URL DEL VIDEO: '.getVideoURL('nombre_de_tu_video.mp4');
?>




getVideo.php
PHP:
<?php
$ip = $_SERVER['REMOTE_ADDR'];   
$key = 'KEYPERSONAL'; 
$token = md5($_GET['mp4'].$ip.$key); 
if($token != $_GET['token']) exit; //SI NO COINCIDE EL TOKEN NO CONTINUA 
$mp4_real = $_SERVER['DOCUMENT_ROOT'].'/dvdr/'.$_GET['mp4']; 

$fp = @fopen($mp4_real, 'rb');

$size = filesize($mp4_real);
$length = $size;
$start = 0;
$end = $size-1;

header('Content-type: video/mp4');
header('Accept-Ranges: bytes');
if($_SERVER['HTTP_RANGE']){
	$c_start = $start;
	$c_end = $end;

	list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
	if(strpos($range, ',') !== false){
		header('HTTP/1.1 416 Requested Range Not Satisfiable');
		header("Content-Range: bytes $start-$end/$size");
		exit;
	}
	if($range == '-'){
		$c_start = $size - substr($range, 1);
	}else{
		$range = explode('-', $range);
		$c_start = $range[0];
		$c_end = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size;
	}
	$c_end = ($c_end > $end) ? $end : $c_end;
	if($c_start > $c_end || $c_start > $size - 1 || $c_end >= $size){
		header('HTTP/1.1 416 Requested Range Not Satisfiable');
		header("Content-Range: bytes $start-$end/$size");
		exit;
	}
	$start = $c_start;
	$end = $c_end;
	$length = $end - $start + 1;
	fseek($fp, $start);
	header('HTTP/1.1 206 Partial Content');
}
header("Content-Range: bytes $start-$end/$size");
header("Content-Length: ".$length);

$buffer = 1024 * 8;
while (!feof($fp) && ($p = ftell($fp)) <= $end) {
	if($p + $buffer > $end){
		$buffer = $end - $p + 1;
	}
	set_time_limit(0);
	echo fread($fp, $buffer);
	flush();
}

fclose($fp);
exit()
?>

- - - Actualizado - - -

PD: Edité una cosita que estaba mal jeje

- - - Actualizado - - -

Ah y con esto no te podrán hacer HOTLINK ya que el token no coincidiría porque la IP es distinta.

Lo mismo para quienes quisieran leer otro archivo que no sea el vídeo, no podrían hacerlo ya que no coincidiría el token.
 
Última edición:
generarvideo.php
PHP:
<?php
$ip = $_SERVER['HTTP_CF_CONNECTING_IP'] OR $ip = $_SERVER['REMOTE_ADDR'];  
$mp4_real = $_SERVER['DOCUMENT_ROOT'].'/videos/video.mp4';
$key = 'KEYPERSONAL';
$token = md5($mp4_real.$ip.$key);
echo "URL/video.php?mp4=$mp4_real&token=$token";
?>


video.php
PHP:
<?php
$ip = $_SERVER['HTTP_CF_CONNECTING_IP'] OR $ip = $_SERVER['REMOTE_ADDR'];  
$key = 'KEYPERSONAL'; //TIENE QUE SER LA MISMA QUE EN "generavideo.php"
$token = md5($_GET['mp4'].$ip.$key);
if($token != $_GET['token']) exit; //SI NO COINCIDE EL TOKEN NO CONTINUA
$mp4_real = $_GET['mp4'];
header("Content-Type: video/mp4");
header("Content-Length: ".filesize($mp4_real));
readfile($mp4_real);
?>

- - - Actualizado - - -

PD: Edité una cosita que estaba mal jeje

- - - Actualizado - - -

Ah y con esto no te podrán hacer HOTLINK ya que el token no coincidiría porque la IP es distinta.

Lo mismo para quienes quisieran leer otro archivo que no sea el vídeo, no podrían hacerlo ya que no coincidiría el token.

antes que nada gracias por la ayuda, ya puse los 2 archivos en php que me dejaste cambiando /videos/video.mp4 por la ruta donde están mis vídeos pero aun así funcionan, si los jalo directo, no se si tenga que hacer otra modificación, otra pregunta si son varios vídeos tendría que poner por cada vídeo la ruta digamos algo asi /videos/video1.mp4 /videos/video2.mp4 en el documento root

- - - Actualizado - - -

Tambien algo que no explique y no se si tenga algo que ver es que el backend de la aplicacion esta en un hosting y los vídeos están en un servidor dedicado, las 2 cosas están por separado, no se si esa afecte en ealgo
 
Las 2 cosas están por separado, no se si esa afecte en ealgo

Si tiene que ver, si no están en el mismo servidor el htaccess no funcionará.

Como yo te dije si, fijate que modifiqué el mensaje anterior. :encouragement:


(getVideo.php lo tenés que poner en el servidor donde están los videos)
 
funcVideo.php
PHP:
<?php
function getVideoURL($n){
	$ip = $_SERVER['HTTP_CF_CONNECTING_IP'] OR $ip = $_SERVER['REMOTE_ADDR'];  
	$mp4_real = $_SERVER['DOCUMENT_ROOT'].'/videos/'.$n;
	$key = 'KEYPERSONAL';
	$token = md5($mp4_real.$ip.$key);
	return "http://www.tuweb.com/video.php?mp4=$mp4_real&token=$token";
}
?>
(Este archivo lo debes llamar al PHP que mostrará la URL del video)

Ejemplo:
PHP:
<?php
require_once('funcVideo.php');
echo 'URL DEL VIDEO: '.getVideoURL('nombre_de_tu_video.mp4');
?>




getVideo.php
PHP:
<?php
$ip = $_SERVER['HTTP_CF_CONNECTING_IP'] OR $ip = $_SERVER['REMOTE_ADDR'];  
$key = 'KEYPERSONAL'; //TIENE QUE SER LA MISMA QUE EN "generavideo.php"
$token = md5($_GET['mp4'].$ip.$key);
if($token != $_GET['token']) exit; //SI NO COINCIDE EL TOKEN NO CONTINUA
$mp4_real = $_GET['mp4'];
header("Content-Type: video/mp4");
header("Content-Length: ".filesize($mp4_real));
readfile($mp4_real);
?>

- - - Actualizado - - -

PD: Edité una cosita que estaba mal jeje

- - - Actualizado - - -

Ah y con esto no te podrán hacer HOTLINK ya que el token no coincidiría porque la IP es distinta.

Lo mismo para quienes quisieran leer otro archivo que no sea el vídeo, no podrían hacerlo ya que no coincidiría el token.

disculpa la molestia, en esta parte echo 'URL DEL VIDEO: '.getVideoURL('nombre_de_tu_video.mp4'); debo de poner algo asi echo 'http://miweb.com/videos/video1.m4: '.getVideoURL('video1.mp4');
 
disculpa la molestia, en esta parte echo 'URL DEL VIDEO: '.getVideoURL('nombre_de_tu_video.mp4'); debo de poner algo asi echo 'http://miweb.com/videos/video1.m4: '.getVideoURL('video1.mp4');

No, debes poner el nombre del mp4

Ahora debes poner la ruta de los videos en "getVideo.php"

- - - Actualizado - - -

y en el "return" la dirección de tu web.

- - - Actualizado - - -

PD: Los edité de nuevo para no mostrar la ruta del video xD, se me había pasado. (Ambos edité)
 
Última edición:
No, debes poner el nombre del mp4

Ahora debes poner la ruta de los videos en "getVideo.php"

- - - Actualizado - - -

y en el "return" la dirección de tu web.

- - - Actualizado - - -

PD: Los edité de nuevo para no mostrar la ruta del video xD, se me había pasado. (Ambos edité)

Ya subi y modifque los archivos que tenia que modificar, si entro a video.php me da esto http://puu.sh/A3cou/260db734e1.png por lo que veo es el token pero en la app me deja sacar aun el link directo, no se muestra el token ahi http://puu.sh/A3cqo/f15548fd7e.png
 
Ya subi y modifque los archivos que tenia que modificar, si entro a video.php me da esto http://puu.sh/A3cou/260db734e1.png por lo que veo es el token pero en la app me deja sacar aun el link directo, no se muestra el token ahi http://puu.sh/A3cqo/f15548fd7e.png

Ponlos en una carpeta que nadie conozca el nombre y ya

video.php no mostrará la carpeta :encouragement: (Solo tu la sabrías)

- - - Actualizado - - -

O sea getVideo.php?mp4.. es la ruta del mp4

- - - Actualizado - - -
[MENTION=128050]Bakor[/MENTION] fijate que edité funcVideo.php porque puse "video.php" en lugar de "getVideo.php" :fatigue:

Cambialo, sino video.php te dará 404 u.u
 
Última edición:
Ponlos en una carpeta que nadie conozca el nombre y ya

video.php no mostrará la carpeta :encouragement: (Solo tu la sabrías)

- - - Actualizado - - -

O sea getVideo.php?mp4.. es la ruta del mp4

- - - Actualizado - - -
[MENTION=128050]Bakor[/MENTION] fijate que edité funcVideo.php porque puse "video.php" en lugar de "getVideo.php" :fatigue:

Cambialo, sino video.php te dará 404 u.u

ya modifique lo que em comentas en funicVideo.php me quedaron asi mis archivos

en el backend el cual es un subdominio ahi puse estos 2
funcVideo.php
http://puu.sh/A3cSP/173baf748b.png
en este modifique la url y puse la url donde se encuentran los video osea el otro servidor que igual es un subdominio
Video.php
http://puu.sh/A3cOX/abf7ce789a.png
en este solo modifique el nombre del video

este lo puse en el servidor donde estan los video
getVideo.php
http://puu.sh/A3d20/c13e443715.png
en el cual solo modifique el document root

Esto que hice es lo correcto o no es lo correcto.
 
ya modifique lo que em comentas en funicVideo.php me quedaron asi mis archivos

en el backend el cual es un subdominio ahi puse estos 2
funcVideo.php
http://puu.sh/A3cSP/173baf748b.png
en este modifique la url y puse la url donde se encuentran los video osea el otro servidor que igual es un subdominio
Video.php
http://puu.sh/A3cOX/abf7ce789a.png
en este solo modifique el nombre del video

este lo puse en el servidor donde estan los video
getVideo.php
http://puu.sh/A3d20/c13e443715.png
en el cual solo modifique el document root

Esto que hice es lo correcto o no es lo correcto.

Es lo correcto.

¿Entraste ya al enlace de getVideo.php?
 
no me muestra nada en los logs el error que me sale es error 500

Acabo de testearlo y me va bien.

Mira: http://tabunder.com/video.php

¿Pusiste bien la ruta en getVideo.php?

- - - Actualizado - - -

Si quieres, ese link que te genera (que seguramente podrás ver el video) pasaselo a alguien más (con otra IP) y te dirá que le salió en blanco.

- - - Actualizado - - -

Para hacerlo por navegador también, agregale al token $_SERVER['HTTP_USER_AGENT'] :encouragement: (En ambos archivos)
 
Última edición:
Acabo de testearlo y me va bien.

Mira: http://tabunder.com/video.php

¿Pusiste bien la ruta en getVideo.php?

- - - Actualizado - - -

Si quieres, ese link que te genera (que seguramente podrás ver el video) pasaselo a alguien más (con otra IP) y te dirá que le salió en blanco.

- - - Actualizado - - -

Para hacerlo para navegador, agregale al token $_SERVER['HTTP_USER_AGENT'] :encouragement:

te puedo mandar por privado las imagenes de como estan mis archivos ya modificado igual y puse algo mal?
 
Atrás
Arriba