garav kumar mishra Ответов: 1

защита видео от кражи в браузере


Ниже я логически пытаюсь предотвратить кражу видео, но где - то застрял.

я создал страницу index.php

<?php

    session_start();

    $_SESSION["check"]="aaa";

?>
<video width="320" height="240" controls>
    <source src="video.php" type="video/mp4">
</video>



и еще video.php

$file = "a.mp4";
    $file_size = filesize($file);
    $fp = fopen($file, "rb");
    $data = fread ($fp, $file_size);
    fclose($fp);
    header ("Content-type: video/mp4");

    if(md5($_SESSION["check"])=="aaa"){
       echo $data;
    }else{

    }


но я хочу, когда пользователь открыт video.php он должен просто получить какое-то сообщение или ошибку, но не видео
как пользователь может получить значение сеанса на video.php
он все еще способен видеть и сохранять видео любым способом извращать это

enhzflep

С первого взгляда.

1) Поместите видео в папку вне корня сервера (пользователь не может ввести прямой адрес видео)
2) Используйте php, чтобы получить их отсюда (не прошедшие проверку подлинности пользователи не могут получить страницу, которая извлекает видео)
3) Используйте DRM вспышки

Это не остановит экранные записи, но сделает загруженные данные бесполезными ни для чего, кроме флэш-видеоплеера. 3dBuzz.com изменил их систему несколько лет назад, когда я бывал в чем-то подобном. Понятия не имею, изменилось ли оно с тех пор.

1 Ответов

Рейтинг:
0

Er. Tushar Srivastava

Привет Друг,
попробовать это.... Я был тронут вашим вопросом, и я нырнул в глубокий океан кодирования, и я достал эту прекрасную жемчужину для вас. Скажите мне, сработало ли это для вас в соответствии с вашим требованием или нет. Кроме того, оцените мой ответ. Счастливое Кодирование :)

Вот мое решение.. это то, что я называю двухслойной безопасностью, и оно нерушимо (по-моему)... Попробовать это...

<?php
/**
 * index.php - The Entry File
**/

// Start the session
session_start();
// It is really important to regenerate id on every click...
session_regenerate_id();

// We will tell the next file that we have a token set using session
$_SSEION['setToken'] = true;

// The filename... You can get that from a $_GET variable and store it here
$token = "vid.mp4";

// We will be encrypting the video name using session id as key ans AES128 as the algorithm
$token_encrypted = openssl_encrypt($token, "aes128", session_id());

?>

<video width="320" height="240" controls="">
  <source src="video.php?vid=<?php echo $token_encrypted; ?>">
</source></video>


<?php
/**
 * video.php - The First Entry Point
**/

session_start();
// Get Token
$token = $_GET['vid'];
// Get Current Session ID
$prev= session_id();
// Test the session variable token is set
if(isset($_SESSION['setToken']))
{
  // This was a one time token and this is your security
  unset($_SESSION['setToken']);
  // Now we will re-encrypt the token
  $token = openssl_decrypt($token, "aes128", session_id());
  // Now Regenerate the session id
  session_regenerate_id();
  // Now re-encrypt the token with a key combination of both new and old ids
  $token = openssl_encrypt($token, "aes128", $prev.session_id());
}
else
{
  // If token was not matched, we have changed the id therefore the next script will not be able to decrypt the token
  session_regenerate_id(true);
}
header("Location: access.php?id=".$prev."&vid=".$token);
?>

/**
 * access.php - The main serving file which will server the video
**/
session_start();

// Decrypt the Token to get back the video file name
$token = openssl_decrypt($_GET['vid'], "aes128", $_GET['id'].session_id());

// Check if file exists
if(file_exists("videos/".$token))
{
  // Another important point here is a session id regeneration
  session_regenerate_id(true);  

  $file = $token;
  $file_size = filesize($file);
  $file_pointer = fopen($file, "rb");
  $data = fread($file_pointer, $file_size);
  header("Content-type: video/mp4");

  echo $data;
}
else {
  echo "Error: File Does not exists";
}


Я надеюсь, что этот полный пример поможет вам достичь тех результатов, которых вы хотите достичь. И большое вам спасибо за такую милую загадку.

по отношению
Тушар Шривастава


BobJanova

Пользователь может следить за трафиком браузера (например, через Chrome F12), останавливать первоначальный запрос на video.php, и идите прямо к access.php с помощью маркера VID на начальной странице. Кроме того, пользователь может записать ответ на запрос к access.php и сохранить его.

Er. Tushar Srivastava

все в порядке... Тогда есть другое решение... Сделать одну вещь... в случае, если условие в video.php... расшифровать жетон, regenrate идентификатор сессии и использовать новый идентификатор сессии, чтобы повторно зашифровать маркер и отправить его на access.php теперь, проблема решена? :)

BobJanova

Почти, но нет. Пользователь по-прежнему может записать ответ и сохранить его или заблокировать первоначальный запрос на video.php а затем отправить его вручную.

Er. Tushar Srivastava

Хорошо... логически правильный.... Ладно, мне нужно время, но я сделаю нерушимый код :) :) :)

Er. Tushar Srivastava

Взгляните на код сейчас, я обновил свой код....

garav kumar mishra

ладно, это нормально.
Но когда пользователь нажимает ctrl+s в firefox, vidoe загружается.

где, как в хроме видео не загружается. ??

Er. Tushar Srivastava

На самом деле видео-тег в HTML5 имеет эту проблему.... Я бы рекомендовал вам использовать либо flash player, либо какой-нибудь другой плеер, возможно, написанный на Java, например jwPlayer ..... Желаю удачи

garav kumar mishra

недавно я обнаружил ошибку open browser click view source.
вы получите ссылку на видео в виде

http://localhost/test/access.php?id=2hmekb383qv3k8cpn45eep2u60&vid=kXjCRz4E8PLe2Ztq7loJAg==

когда вы открываете эту ссылку в браузере вы все еще можете смотреть видео и также можете его скачать

Er. Tushar Srivastava

Логично, что если страница успешно загружена в браузере, то первый запрос был сделан по тегу video и таким образом.... данная ссылка больше не должна быть действительной.... :/ т. е. если пользователь нажмет на сгенерированную ссылку, он больше не сможет запросить тот же файл снова :/ (это была одноразовая маркерная ссылка).... Пожалуйста, проверьте код, если я пропустил какую-то проверку... :)

garav kumar mishra

нет в основном то что происходит это когда вы нажимаете кнопку Просмотр источника страницы непосредственно как
view-source:localhost.com/video/ тогда вы можете получить url-адрес страницы доступа, и это работает

Er. Tushar Srivastava

Я думаю, я понял проблему.... :/ ну решение не может быть очень сложным, если мы используем javaScript или jQuery (библиотека на javaScript). Что можно сделать, это использовать AJAX, чтобы получить JSON, закодированные URL-адрес и затем заменить, что с манекеном URL в тег видео.... : кроме того), в JScript может создать маркер, который будет зашифрована так, что ни один пользователь не сможет использовать этот маркер, чтобы обратиться к video.php :) Однако это может быть очень много клиентского программирования на javaScript... Желаю удачи :)

garav kumar mishra

то, что я вижу при воспроизведении видео idm(Internet Download Manager), может захватывать видео, и видео загружается.

есть сайт
http://cmsdemosite.net/index.php/concrete5-addons/secure-streaming-addon/
здесь vidoe не загружается через IDM, как этого можно достичь ?

Member 13929183

Тушар Шривастава,

Я новичок в php. Не могли бы вы рассказать мне, как я добавляю свой видеофайл в ваш сценарий?

Для explame, если я хочу воспроизвести этот url : https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4

На каком. php мне нужно его добавить??

Я устал изо всех сил, чтобы понять, но в итоге получаю ошибку "Ошибка: файл не существует"

Любая помощь будет оценена по достоинству.

Спасибо

Er. Tushar Srivastava

Привет,

В "access.php-есть условие" если-еще". В этом условии используется (file_exists (...)). Это используется только для проверки того, существует ли файл в файловой системе (не из URL-адреса). Итак, вам нужно изменить эту функцию на if(@fopen("https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4","r")==true) {} и это должно сработать.

Желаю удачи.

Member 13929183

<?php
/**
* access.php - основной обслуживающий файл, который будет обслуживать видео
**/
session_start();

// Расшифруйте маркер, чтобы получить обратно имя видеофайла
$знак = openssl_decrypt (переменная$_GET['вид'], "aes128", параметр $_GET['идентификатор'].идентификатора session_id());

// Проверьте, существует ли файл
if(@fopen("https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4","r")==true)

{
// Еще один важный момент здесь-регенерация идентификатора сеанса
session_regenerate_id(правда);

$file = $token;
$file_size = размер файла($file);
$file_pointer = fopen($file, "rb");
$data = fread($file_pointer, $file_size);
заголовок("Content-type: video/mp4");

echo $data;
}
еще {
файл Echo "ошибка: не существует";
}
?>;


Неужели я что-то упустил?. Все равно видео не будет воспроизводиться..

Мне нужна твоя помощь в этом деле.

Спасибо

Member 13929183

Пожалуйста, помогите мне в этом вопросе с вашим полным сценарием с использованием URL-адреса