Скрыть HTML-источник видео URL / ограничить папку Linux для конкретного пользователя PHP - PullRequest
0 голосов
/ 07 марта 2019

У меня есть несколько HTML-тегов видео с исходными URL-адресами, как показано в моем файле PHP:

<video class="d-block video-js vjs-default-skin col-video" width="100%" controls:false;>
    <source src="<?php echo $videoPath; ?>" type='video/mp4'>
</video>

Как загружено клиентом, атрибут источника выглядит следующим образом в веб-браузере:

<source src="./Username/videos/001_video.mp4" type='video/mp4'>
{...}
<source src="./Username/videos/002_video.mp4" type='video/mp4'>
{...}

Моя проблема в том, что Я не хочу, чтобы клиент мог просматривать видео другого пользователя, изменив URL в атрибуте источника тегов видео.

Похоже, это называется "пользовательское содержимое / ресурсы с ограниченным доступом" (не уверен, поскольку я разработчик C / C ++).

Я не использую фреймворк, чистый PHP, на L.A.M.P. (Apache2) веб-сервер.

Я знаю, что это было сделано 10 лет назад, и есть много более новых решений с использованием фреймворков или других языков, таких как NodeJS, но у меня нет возможности изменить архитектуру веб-сайта на данный момент (но это будет рассмотрен в будущем).

Это можно сделать на стороне сервера в конфигурации Apache (если можно?) Или на стороне HTML / PHP.

То, что я видел в Интернете перед тем, как спросить, - это решение, подобное этому (https://www.sitepoint.com/community/t/hide-video-url/225822/7), , которое я пробовал :

<source src="video.php?show_the_video=VIDEO_ID/NAME_ENCRYPTED" type='video/mp4'>

И есть, в video.php, что-то вроде этого:

if (($_SERVER['REQUEST_METHOD'] === "GET") && ( isset($_GET['show_the_video']) )) {
    $uncryptedPath = decrypt($_GET['show_the_video']);
    $ctype = 'video/mp4';
    header('Content-Type: ' . $ctype);
    $file_path_name = $uncryptedPath;
    $handle = fopen($file_path_name, "rb");
    $contents = fread($handle, filesize($file_path_name));
    fclose($handle);
    echo $contents;
} else {
    echo "";
}

Но мне кажется, это не очень хорошо работает (может быть, у меня много видео-тегов на одной странице). Работало частично, но загрузка страницы была такой медленной ... Это не приемлемо для меня. На загрузку страницы ушло около 20 видео-тегов.

Кто-нибудь может мне помочь, направляя меня или предлагая решения?

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Как насчет использования RewriteMap ?Ваш тег src содержит зашифрованный URL.В вашем .htaccess вы пишете следующее:

RewriteMap videos "txt:/path/to/map.txt"
RewriteRule "(crypted-pattern)" "/path/to/videos/${videos:$1}"

Ваш map.txt выглядит так и должен обновляться при загрузке нового видео:

hash1 user1/video1.mp4
hash2 user1/video2.mp4
hash3 user2/video1.mp4
# and so on...

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

Вы также можете использовать базу данных SQL или другие типы карт вместо простого текстового файла.

0 голосов
/ 08 марта 2019

Решение, предлагаемое @ Script47, простое:

  • Сохраните тег источника видео следующим образом:
  • Но только на одном теге видео, который показывает видео в полноэкранном режиме (по модели) и заменить другие на миниатюры

Я пробовал это, но кажется, что загрузка видеофайла продолжительностью 1 минута (~ 8 МБ) с использованием функций fopen () и fread () в PHPтак медленно.

Любой способ потоковой передачи из файла MP4 в тег источника видео в PHP, но быстрее, чем fopen () / fread () (или сделать их быстрее)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...