Member 13265453 Ответов: 1

Как я могу защитить себя от пользователей, непосредственно загружающих мои HTML-видео с помощью PHP


Я пытаюсь разработать веб-сайт потоковой передачи видео (для учебных целей) на PHP, используя видеоэлемент HTML5.

Единственная проблема с видео HTML5 элемент что это невероятно небезопасный. Это позволяет пользователю непосредственно видеть источник видео, если он осматривает элемент.

Я хотел бы защититься от этого. Я наткнулся этот ответ, и попытался защитить с помощью этого кода (но он никогда не работал, и я получил ошибку:
Using an empty Initialization Vector (iv) is potentially insecure and not recommended
)

Итак, я пошел дальше и создал свою собственную версию (но я получаю ошибку 404 в консоли для видео).

Что я уже пробовал:

view.php:
<?php
    $dbh->query("INSERT INTO vpt_tokens (video_id, vpt) VALUES (abcd, 1234)");
?>
<video src="/intrapics/stream.php?m=abcd&vpt=1234"></video>


stream.php:
if(!isset($_GET["vpt"]) || trim($_GET["vpt"]) === ""){
    header("HTTP/1.0 404 Not Found");
} else {
    $check = $dbh->query("SELECT vpt FROM vpt_tokens WHERE video_id = abcd AND vpt = " . $_GET["vpt"]); // please note that I do actually use prepared statements, this is just simplified
    if(!$check->rowCount()){
        header("HTTP/1.0 404 Not Found");
    } else {
        $file = "player/" . $_GET["m"] . ".mp4";
        if(file_exists($file)){
            header("Content-type: video/mp4");
        }
        echo file_get_contents($file);
        $dbh->query("DELETE FROM vpt_tokens WHERE vpt = " . $_GET["vpt"]);
    }
}

Kornfeld Eliyahu Peter

Все эти отсутствующие скобки-опечатки или настоящие?

Member 13265453

Опечатки :) Мне пришлось преобразовать свой код из использования моих классов ООП в обычный ванильный PHP.

1 Ответов

Рейтинг:
1

Dave Kreskowiak

Простой. Вы не. Вы не шифруете видео. Вы просто усложняете доступ к видео с помощью зашифрованного URL-адреса. Проблема в том, что URL-адрес не меняется при каждой загрузке видео и в любом случае легко перехватывается.

Подумайте об этом на секунду. Тег HTML5 не может воспроизводить "зашифрованное" видео. Несмотря ни на что, содержимое должно быть расшифровано, прежде чем тег сможет воспроизвести его. Чтобы расшифровать его, вы должны поместить расшифрованный контент туда, где тег HTML5 может добраться до него. Это открывает контент для загрузки кем угодно.

Вам нужно было бы написать свой собственный плеер, который расшифровывает на лету, но даже тогда у вас есть проблема с защитой ключа для расшифровки контента. Опять же, кто-то может использовать ключ для расшифровки содержимого.