Рейтинг:
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-адреса