J
jzucchet
Alfa
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Ocultarlo a traves de una URL y servidor propio.Desde URL o Desde tu propio vps?
Ocultarlo a traves de una URL y servidor propio.
Ocultarlo a traves de una URL y servidor propio.
Ocultarlo a traves de una URL y servidor propio.
/**
Esto creara una funcion generica que validara la fecha, dispositivo del usuario, navegador, ip, fecha de caducidad y demas
La funciones Decrypt debe ser creada y pasarla como JSON PARSE
*/
/** DRM */
function created_uri($contentShow, $data)
{
$allowed = isset($_SERVER['HTTP_X_ALLOWED']) ? $_SERVER['HTTP_X_ALLOWED'] : false;
$content = isset($_SERVER['HTTP_X_CONTENT']) ? $_SERVER['HTTP_X_CONTENT'] : false;
if ($allowed and $content) {
/** Firma */
$sig = isset($data['sig']) ? $data['sig'] : false;
if ($sig) {
$signature = json_decode(Decrypt($sig));
$method = $signature->encrypted;
/** Permitido */
$authenticated = true;
/** exp */
$exp = isset($method->expire) ? $method->expire : false;
if (strtotime('now') >= $exp) {
$authenticated = false;
}
/** ei */
$ei = isset($method->ei) ? base64_decode($method->ei) : false;
if (helper_user_agent() != $ei) {
$authenticated = false;
}
/** ip */
$ip = isset($method->ip) ? $method->ip : false;
if (helper_user_ip() != $ip) {
$authenticated = false;
}
/** id */
$id = isset($method->id) ? $method->id : false;
if ($content != $id) {
$authenticated = false;
}
/** Acceso */
if ($authenticated) {
return $contentShow;
} else {
exit('{[Error.401]}');
}
} else {
exit('{[Error.400]}');
}
} else {
exit('{[Error.400]}');
}
}
/*
Lo siguiente es para utilizar los metodos created_uri()
*/
/** Tiempo */
$iat = time();
$exp = $iat + (60 * 1);
/** Firma */
$sig = array(
'iat' => $iat,
'exp' => $exp,
'encrypted' => [
'expire' => $exp,
'ei' => base64_encode( helper_user_agent() ),
'ip' => helper_user_ip(),
'id' => 'Identificador del video ej: 1',
'itag' => 'default',
'source' => getenv('APP_NAME'),
'mime' => 'application/x-mpegURL',
'clen' => 'Segundos del video/content',
'lmt' => $iat,
'sparams' => 'expire,ei,ip,id,itag,source,mime,clen,dur,lmt'
]
);
/*
El metodo Encrypt debe ser creada y pasarla como JSON PARSE
*/
/** Firma protegida */
$tplSig = Encrypt(json_encode($sig));
$urlSig = http_build_query($sig['encrypted']);
/** Firma Creada */
$signature = '?' . urldecode ( $urlSig ) . '&sig=' . $tplSig;
/*
Enviando los parametros
*/
/** La firma debe pasar de la siguiente forma */
$uri = '/streamingProgressive/' . $slug . $signature;
/*
Adicionalmente debe enviar varios parametros por los HEADER
Asi evitara el uso de hotlinking fake IP / referrer
*/
/*
Esto debe ser enviado en los Header's de su soliictud a la url
streamingProgressive
xhr.setRequestHeader('X-content', '<?php echo $sig['encrypted']['id']; ?>');
xhr.setRequestHeader('X-allowed', '<?php echo $sig['encrypted']['itag']; ?>');
*/
/*
Funciones genericas que se usan
*/
/** Metodo para la IP del usuario */
function helper_user_ip()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
//check ip from share internet
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
//to check ip is pass from proxy
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (!empty($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
} else {
$ip = null;
}
return $ip;
}
/** Metodo para obtener el agent del usuario */
function helper_user_agent()
{
if (!empty($_SERVER['HTTP_USER_AGENT'])) {
//check ip from share internet
$agent = $_SERVER['HTTP_USER_AGENT'];
} else {
$agent = null;
}
return $agent;
}
/**
Analizando las URL'S y entiendo el proceso realizado
*/
/**
https://videos.com/videoplayback/1?expire=1576342267&ei=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzc4LjAuMzkwNC4xMDggU2FmYXJpLzUzNy4zNg==&ip=127.0.0.1&id=1&itag=default&source=Video&mime=application/x-mpegURL&clen=6932456&lmt=1576342207&sparams=expire,ei,ip,id,itag,source,mime,clen,dur,lmt&sig=eUFOVng2T2N2MFFZUFVHMDd6ZnVuZU1PUFBmNEE5TDFEN2JmWitQSFBGSTdCZ2VhZGlrTlBqVXQyQ2ptTWJMcC9YS0ZrZ3FTVkdkYTIvTERRTG8wWjY5cE9qMnVCYlhPQWNkcnJQcmxVYkVCR3lhSTcvMUxmRnpaTWVpcFNyYnpDVTZsa1FiZjFaanpUbklnOTVlS0pkNjRoVXlCNlRhY2dBR2ZRSloxYW9YN3YzVFI0WVpyVUFQYzM3ZnhXRU4yMUYrNE4yZFNEbW84NkJ0Sm56Z0xjMzFxaHNUbUF6T0gzeHg2Q1dWaWdOcWp6SVFSQ3ROaWJlVzB2aCt6SktOVDVVMXZybUtDakEvT0VFenEwUmVvc1FHWE9YeS9VZEs0UkVpS3ZLbjdCYXBEaUMxaTF3YXRzbjQ2WDAwUWx5cU8zVmhyUUFTNnU0THdvQ2NSNnkwaVY3S1Q4aSthbHpSdGJSbFZkc0phTGI2alJJVVB2Z0Z0WEx6V3JIalc4bXl2RzBQOFRvRXRVMXJKdzBSTS9mUW5TNXY4cHhFOVJPdTA4ajRCWFFoeWlYQ3g4bTJTZ3V4ZmdFY1BQaHB2bXVISEF0N3RlckxuNlhIUkVZZkoyRllXekpWS1RKL2czTWpreXQ3Vyt5aEZ4U2NTN01Td09remRwam90N1psQXQ4dVNtQ0ZPa0VtQ0RGOWpDWkdaY0VoS3Z1ZXIvVU15aVp1WDVyVlFWRWhxcW1rQ0FURy9QK1lrVjg1TjNONmpQU0FYT0ZNUVVheGxzYStSeU53ZHBjbUFRdz09
URL PARTS
Scheme:
https
Protocol:
https
Authority:
videos.com
Host:
videos.com
Hostname:
videos.com
Domain:
videos.com
Tld:
com
Resource:
/videoplayback/1?expire=1576342267&ei=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzc4LjAuMzkwNC4xMDggU2FmYXJpLzUzNy4zNg==&ip=127.0.0.1&id=1&itag=default&source=Video&mime=application/x-mpegURL&clen=6932456&lmt=1576342207&sparams=expire,ei,ip,id,itag,source,mime,clen,dur,lmt&sig=eUFOVng2T2N2MFFZUFVHMDd6ZnVuZU1PUFBmNEE5TDFEN2JmWitQSFBGSTdCZ2VhZGlrTlBqVXQyQ2ptTWJMcC9YS0ZrZ3FTVkdkYTIvTERRTG8wWjY5cE9qMnVCYlhPQWNkcnJQcmxVYkVCR3lhSTcvMUxmRnpaTWVpcFNyYnpDVTZsa1FiZjFaanpUbklnOTVlS0pkNjRoVXlCNlRhY2dBR2ZRSloxYW9YN3YzVFI0WVpyVUFQYzM3ZnhXRU4yMUYrNE4yZFNEbW84NkJ0Sm56Z0xjMzFxaHNUbUF6T0gzeHg2Q1dWaWdOcWp6SVFSQ3ROaWJlVzB2aCt6SktOVDVVMXZybUtDakEvT0VFenEwUmVvc1FHWE9YeS9VZEs0UkVpS3ZLbjdCYXBEaUMxaTF3YXRzbjQ2WDAwUWx5cU8zVmhyUUFTNnU0THdvQ2NSNnkwaVY3S1Q4aSthbHpSdGJSbFZkc0phTGI2alJJVVB2Z0Z0WEx6V3JIalc4bXl2RzBQOFRvRXRVMXJKdzBSTS9mUW5TNXY4cHhFOVJPdTA4ajRCWFFoeWlYQ3g4bTJTZ3V4ZmdFY1BQaHB2bXVISEF0N3RlckxuNlhIUkVZZkoyRllXekpWS1RKL2czTWpreXQ3Vyt5aEZ4U2NTN01Td09remRwam90N1psQXQ4dVNtQ0ZPa0VtQ0RGOWpDWkdaY0VoS3Z1ZXIvVU15aVp1WDVyVlFWRWhxcW1rQ0FURy9QK1lrVjg1TjNONmpQU0FYT0ZNUVVheGxzYStSeU53ZHBjbUFRdz09
Directory:
/videoplayback
Path:
/videoplayback/1
File name:
1
Query string:
expire=1576342267&ei=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzc4LjAuMzkwNC4xMDggU2FmYXJpLzUzNy4zNg==&ip=127.0.0.1&id=1&itag=default&source=Video&mime=application/x-mpegURL&clen=6932456&lmt=1576342207&sparams=expire,ei,ip,id,itag,source,mime,clen,dur,lmt&sig=eUFOVng2T2N2MFFZUFVHMDd6ZnVuZU1PUFBmNEE5TDFEN2JmWitQSFBGSTdCZ2VhZGlrTlBqVXQyQ2ptTWJMcC9YS0ZrZ3FTVkdkYTIvTERRTG8wWjY5cE9qMnVCYlhPQWNkcnJQcmxVYkVCR3lhSTcvMUxmRnpaTWVpcFNyYnpDVTZsa1FiZjFaanpUbklnOTVlS0pkNjRoVXlCNlRhY2dBR2ZRSloxYW9YN3YzVFI0WVpyVUFQYzM3ZnhXRU4yMUYrNE4yZFNEbW84NkJ0Sm56Z0xjMzFxaHNUbUF6T0gzeHg2Q1dWaWdOcWp6SVFSQ3ROaWJlVzB2aCt6SktOVDVVMXZybUtDakEvT0VFenEwUmVvc1FHWE9YeS9VZEs0UkVpS3ZLbjdCYXBEaUMxaTF3YXRzbjQ2WDAwUWx5cU8zVmhyUUFTNnU0THdvQ2NSNnkwaVY3S1Q4aSthbHpSdGJSbFZkc0phTGI2alJJVVB2Z0Z0WEx6V3JIalc4bXl2RzBQOFRvRXRVMXJKdzBSTS9mUW5TNXY4cHhFOVJPdTA4ajRCWFFoeWlYQ3g4bTJTZ3V4ZmdFY1BQaHB2bXVISEF0N3RlckxuNlhIUkVZZkoyRllXekpWS1RKL2czTWpreXQ3Vyt5aEZ4U2NTN01Td09remRwam90N1psQXQ4dVNtQ0ZPa0VtQ0RGOWpDWkdaY0VoS3Z1ZXIvVU15aVp1WDVyVlFWRWhxcW1rQ0FURy9QK1lrVjg1TjNONmpQU0FYT0ZNUVVheGxzYStSeU53ZHBjbUFRdz09
Query String
'expire':
1576342267 // Tiempo de vida
'ei': // Navegador
TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzc4LjAuMzkwNC4xMDggU2FmYXJpLzUzNy4zNg==
'ip': // Ip del usuario
127.0.0.1
'id':
1 // Recurso solicitado
'itag':
default // Calidad del video
'source':
Video // Fuente donde se solicita (DOMINIO)
'mime':
application/x-mpegURL // Tipo de contenido
'clen':
6932456 // Duracion del video
'lmt':
1576342207 // Fecha de creacion
'sparams':
expire,ei,ip,id,itag,source,mime,clen,dur,lmt // Parametros validados
'sig':
SIGNATURE // Firma que sera validada por el back-end
*/
Ósea por ejemplo que la url del streaming sea por ejemplo: Streaming.com:80/live.m3u8 o .mp4 y que bajo mi dominio y servidor diga mydomain.com/test-php? algo así...De las dos formas?
Tienes algún código?una forma "podría" ser que llames a cierta web en php, le pases el parámetro que es la ruta o el id de tu streaming pero lo encriptes usando AES o algún otro algoritmo de encriptación a prueba de todo intento de descifrado, ademas en tu servidor puedes validar de donde viene esa conexión, si no viene de tu servidor rechazas la petición.
Voy a probar a ver que tal.Desde URL
Me he quedado dormido este codigo creado por mi pero usado por muchos es bueno para proteger contenido de una forma sencilla
es llamado DRM basico
Es lo que cita Mask7OfDragonTienes algún código?
No es lo que quiero exactamente, quiero algo que por ejemplo el dominio del archivo sea 352.235.234.32/live.m3u8 , .mp4 o .mp3 y que con el código a la gente le salga algo así mydomain.com/test.php? o algo así cosa que no sepan de donde viene el dominio original.Desde URL o Desde tu propio vps?
No es lo que quiero exactamente, quiero algo que por ejemplo el dominio del archivo sea 352.235.234.32/live.m3u8 , .mp4 o .mp3 y que con el código a la gente le salga algo así mydomain.com/test.php? o algo así cosa que no sepan de donde viene el dominio original.
Perfecto eso es lo que quería, pero tengo un problema si la persona entra al archivo se ve el código junto con el link del streaming. No hay forma de que ese código cuando accedan a través del link de otra cosa o no se vea directamente?PHP VideoStream class for HTML5 video streaming
PHP VideoStream class for HTML5 video streaming. GitHub Gist: instantly share code, notes, and snippets.gist.github.com
$stream1 = new VideoStream('archivos/local.mp4');
$stream1->start();
Convertira tuservidor.com/archivos/local.mp4
a
dondeseejecute.php
Perfecto eso es lo que quería, pero tengo un problema si la persona entra al archivo se ve el código junto con el link del streaming. No hay forma de que ese código cuando accedan a través del link de otra cosa o no se vea directamente?
Vale gracias!con la clase de arriba haces enlaces solo para la ip que lo creo y demas lo puedes juntar y hacer algo guapo.
Vale gracias!
Una última cosita, cuando tenga el código ya hecho, lo pongo en el reproductor tal cual (link.com/index.php)? O le tengo que poner algun #.m3u8 para que ande?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?