Как отключить «Сохранить видео как ...» в меню браузера, вызываемом правой кнопкой мыши, чтобы клиенты не могли загружать видео?
Существуют ли более полные решения, которые не позволяют клиенту получить прямой доступ к пути к файлу?
Как отключить «Сохранить видео как ...» в меню браузера, вызываемом правой кнопкой мыши, чтобы клиенты не могли загружать видео?
Существуют ли более полные решения, которые не позволяют клиенту получить прямой доступ к пути к файлу?
File→Save As
). Даже если вы можете как-то заблокировать это, они могут просмотреть исходный код, чтобы найти URL файла. Даже если вы можете немного это скрыть, они могут вырвать его из кеша. Даже если вы можете усложнить это (например, поток), они могут захватывать сетевой трафик с помощью анализатора или чего-то еще. Дело в том, что если вы отправите его пользователю, он может его сохранить. Обойти это невозможно. Вопрос, который вам нужно задать, - почему вам нужно так сильно это остановить. Это действительно даже необходимо? Стоит ли это усилий и недружественных пользователей?Ответы:
Вы не можете . Это потому, что браузеры предназначены для этого: обслуживать контент . Но вы можете усложнить загрузку .
Во-первых, вы можете отключить
contextmenu
событие , так называемый «правый клик». Это помешает вашему обычному заносу нагло копировать видео, щелкнув правой кнопкой мыши и сохрани как. Но тогда они могли бы просто отключить JS и обойти это или найти источник видео через отладчик браузера. Плюс это плохой UX. В контекстном меню есть много законных вещей, кроме «Сохранить как».Вы также можете использовать пользовательские библиотеки видеоплееров. В большинстве из них реализованы видеоплееры, которые настраивают контекстное меню по вашему вкусу. Таким образом, вы не получите контекстное меню браузера по умолчанию. И если когда-либо они будут обслуживать пункт меню, похожий на Сохранить как, вы можете отключить его. Но опять же, это обходной путь JS. Недостатки аналогичны предыдущему варианту.
Еще один способ сделать это - показать видео с помощью HTTP Live Streaming . По сути, он нарезает видео на куски и подает их один за другим. Именно так большинство потоковых сайтов обслуживают видео. Таким образом, даже если вам удастся сохранить как, вы сохраните только фрагмент, а не все видео. Потребовалось бы немного больше усилий, чтобы собрать все куски и сшить их с помощью специального программного обеспечения.
Другой метод заключается в краска
<video>
на<canvas>
. В этой технике с небольшим количеством JavaScript, что вы видите на странице, это<canvas>
элемент рендеринга кадров из скрытого<video>
. И потому что это<canvas>
, контекстное меню будет использовать<img>
меню, а не<video>
. Вы получите «Сохранить изображение как» вместо «Сохранить видео как».Вы также можете использовать токены CSRF в своих интересах. Ваш сервер отправит токен на страницу. Затем вы используете этот токен для получения вашего видео. Ваш сервер проверяет, является ли он действительным токеном, прежде чем отправлять видео или получить HTTP 401 . Идея состоит в том, что вы можете получить видео только при наличии токена, который вы сможете получить только при переходе со страницы, а не при прямом посещении URL-адреса видео.
В конце дня я просто загрузил бы свое видео на сторонний видео-сайт, такой как YouTube или Vimeo. У них есть хорошие инструменты для управления видео, которые оптимизируют воспроизведение на устройстве, и они прилагают усилия для предотвращения копирования их видео без каких-либо усилий с вашей стороны.
источник
src
от<video>
. К тому времени, когда ваша страница загружена, у БД есть токен, у страницы есть токен. Как только<video>
начинается загрузка (обращается к конечной точке), сервер проверяет наличие токена в БД, удаляет его и передает файл в потоковом режиме. Если токен отсутствует в результате второго доступа , не передавайте файл в потоковом режиме.Это простое решение для тех, кто хочет просто удалить правую кнопку «сохранить» из видео html5
источник
src
атрибут и откройте его на другой вкладке или используйтеwget
для его загрузки!Простой ответ,
ВЫ НЕ МОЖЕТЕ
Если они смотрят ваше видео, оно уже есть
источник
Да, вы можете сделать это в три этапа:
Сохраните файл в этом подкаталоге с именем «.htaccess» и добавьте строки ниже.
Теперь ссылка на источник бесполезна , но нам все равно нужно убедиться, что любой пользователь, пытающийся загрузить файл, не сможет напрямую обслуживать файл.
Для более полного решения , теперь подайте видео с помощью флеш-плеера (или html canvas) и никогда не делайте ссылки на видео напрямую. Чтобы просто удалить контекстное меню, добавьте в ваш HTML:
Результат:
www.foo.com/player.html будет правильно воспроизводить видео , но если вы посетите www.foo.com/videos/video.mp4:
Это будет работать для прямой загрузки, cURL, хотлинкинга, вы называете это.
Это полный ответ на два заданных вопроса, а не ответ на вопрос: «могу ли я запретить пользователю загружать видео, которое он уже скачал».
источник
.htaccess
контентаЛучший способ, которым я обычно пользуюсь, - это очень просто, я полностью отключаю контекстное меню на всей странице, чистый html + javascript:
Это оно! Я делаю это, потому что вы всегда можете увидеть источник, щелкнув правой кнопкой мыши.
Хорошо, вы говорите: «Я могу использовать источник просмотра непосредственно из браузера», и это правда, но мы начнем с того, что вы НЕ МОЖЕТЕ прекратить скачивать
html5
видео.источник
Как разработчик на стороне клиента, я рекомендую использовать URL-адрес BLOB-объекта, URL-адрес BLOB-объекта - это URL-адрес клиента, который ссылается на двоичный объект
в HTML оставьте ваше видео
src
пустым, а в JS извлеките видеофайл с помощью AJAX, убедитесь, что тип ответа - blobПримечание: этот метод не рекомендуется для больших файлов
РЕДАКТИРОВАТЬ
Используйте перекрестную блокировку происхождения, чтобы избежать прямой загрузки
если видео доставлено API, используйте другой метод (PUT / POST) вместо 'GET'
источник
PHP отправляет тег видео html5 вместе с сеансом, где ключом является случайная строка, а значением является имя файла.
Теперь PHP попросили отправить видео. PHP восстанавливает имя файла; удаляет сеанс и мгновенно отправляет видео. Кроме того, должны присутствовать все заголовки «без кеша» и mime-типа.
Теперь, если пользователь скопирует URL в новой вкладке или воспользуется контекстным меню, ему не повезет.
источник
Вы можете, по крайней мере, помешать неопытным людям использовать контекстное меню для щелчка правой кнопкой мыши, чтобы загрузить ваше видео. Вы можете отключить контекстное меню для любого элемента, используя атрибут oncontextmenu.
Это работает для элемента body (целой страницы) или только для одного видео, использующего его внутри тега video.
источник
В итоге мы использовали AWS CloudFront с устаревшими URL-адресами. Видео будет загружено, но к тому времени, когда пользователь щелкнет правой кнопкой мыши и выберет Сохранить как, URL-адрес видео, который он первоначально получил, истек. Выполните поиск CloudFront Origin Access Identity.
Для создания URL-адреса видео требуется пара ключей, которую можно создать в интерфейсе командной строки AWS. К вашему сведению, это не мой код, но он прекрасно работает!
источник
Мы могли бы сделать это не так просто, скрыв контекстное меню, например так:
источник
+1 простой и кросс-браузерный способ: вы также можете поместить прозрачное изображение поверх видео с помощью css z-index и opacity. Таким образом, пользователи увидят «сохранить изображение как» вместо «сохранить видео» в контекстном меню.
источник
The
больше не работает. Chrome и Opera по состоянию на июнь 2018 года имеют подменю на временной шкале для прямой загрузки, поэтому пользователю не нужно щелкать правой кнопкой мыши, чтобы загрузить это видео. Интересно, что у Firefox и Edge этого нет ...
источник
Используя сервис, такой как Vimeo: войдите в систему
Vimeo > Goto Video > Settings > Privacy > Mark as Secured
, а также выберите встраивать домены. После настройки доменов для встраивания никому не разрешается встраивать видео или отображать его из браузера, если только он не подключается с указанных доменов. Так что, если у вас есть защищенная страница на вашем сервере, которая загружает проигрыватель Vimeo в iframe, это довольно сложно обойти.источник
Прежде всего осознайте, что невозможно полностью предотвратить загрузку видео, все, что вы можете сделать, это сделать его более сложным . Т.е. вы скрываете источник видео.
Веб-браузер временно загружает видео в буфер, поэтому, если вы можете предотвратить загрузку, вы также запретите просмотр видео.
Вы также должны знать, что <1% от общей численности населения мира сможет понять исходный код, что делает его в любом случае довольно безопасным. Это не значит, что вы не должны скрывать это в источнике - вы должны .
Вы не должны отключать щелчок правой кнопкой мыши, и еще меньше вы должны отобразить сообщение с надписью
"You cannot save this video for copyright reasons. Sorry about that."
. Как предлагается в этом ответе .Это может быть очень раздражающим и запутанным для пользователя. Помимо этого; если они отключат JavaScript в своем браузере, они будут иметь возможность правой кнопкой мыши и сохранить в любом случае.
Вот хитрость CSS, которую вы можете использовать:
CSS нельзя отключить в браузере, защищая ваше видео, фактически не отключая правый клик. Однако одна проблема заключается в том, что она также
controls
не может быть включена, другими словами, они должны быть установлены вfalse
. Если вы собираетесь внедрить свою собственную функцию Play / Pause или использовать API, у которого есть кнопки, отдельные отvideo
тега, то это выполнимый вариант.controls
также есть кнопка загрузки, так что использовать ее тоже не очень хорошая идея.Вот пример JSFiddle .
Если вы собираетесь отключить щелчок правой кнопкой мыши с помощью JavaScript, сохраните также источник видео в JavaScript. Таким образом, если пользователь отключит JavaScript (разрешив щелчок правой кнопкой мыши), видео не будет загружаться (это также немного лучше скрывает источник видео).
От TxRegex ответ :
Теперь добавьте видео через JavaScript:
Функциональный JSFiddle
Другой способ предотвратить щелчок правой кнопкой мыши - использовать
embed
тег. Это, однако, не предоставляет элементы управления для запуска видео, поэтому они должны быть вставлены в JavaScript:источник
pointer-events: none;
ну, вы не можете защитить это на 100%, но вы можете сделать это сложнее. С этими методами, которые я объясняю, я столкнулся с ними во время изучения методов защиты в PluralSight и BestDotNetTraining. . тем не менее, ни один из этих методов не помешал мне загрузить то, что я хочу, но мне было трудно курировать загрузчик, чтобы пройти их защиту.
Помимо других упомянутых способов отключить контекстное меню. пользователь все еще может использовать сторонние инструменты, такие как InternetDownload manager или другое подобное программное обеспечение для загрузки видео. метод защиты, который я объясняю здесь, состоит в том, чтобы смягчить программное обеспечение сторонних производителей.
требование всех этих методов - блокировать пользователя, когда вы узнаете, что кто-то загружает ваши видео. таким образом, они могут загружать только одно или два видео только до того, как вы запретили им доступ к вашему веб-сайту.
отказ
Я не буду нести никакой ответственности, если кто-то злоупотребляет этими методами или использует их для нанесения вреда другим лицам или веб-сайтам, которые я упомянул в качестве примера. это просто для обмена знаниями, чтобы помочь вам защитить свой интеллектуальный продукт.
генерировать ссылки с истечением срока действия
Для этого необходимо создать ссылку на скачивание для каждого пользователя. с этим можно легко справиться с помощью хранилища Azure BLOB или Amazon S3. Вы можете создать ссылку для скачивания с двойной отметкой времени окончания видео. тогда вам нужно захватить эту ссылку на видео и время, которое запрашивается. это необходимо для следующего метода. выгода этого метода заключается в том, что вы генерируете ссылку для скачивания, когда пользователь нажимает кнопку воспроизведения.
При нажатии кнопки воспроизведения вы отправите запрос на сервер, получите ссылку и обновите источник.
регулировать частоту запросов видео
Затем вы отслеживаете, насколько быстро пользователь запрашивает второе видео. если пользователь слишком быстро запросит ссылку для скачивания, вы сразу же заблокируете его. Вы не можете установить этот порог слишком большим, потому что вы можете по ошибке заблокировать пользователей, которые просто просматривают или просматривают видео.
Включить диапазон HTTP
используйте для воспроизведения видео некоторую библиотеку js, например videojs , также вам нужно вернуть AcceptRange в заголовок. Хранилище BLOB-объектов Azure поддерживает это "из коробки". Таким образом, браузер начинает загружать видео по частям. обычно 32 байта на 32 байта. Затем вам нужно прослушать
timeupdate
изменения videojs и обновить ваш сервер в процентах от просмотра видео. процент просмотра видео не может превышать процент доставки видео. и если вы поставляете видеоконтент без получения процентного изменения, вы можете заблокировать пользователя. потому что наверняка они скачивают.реализовать это сложно, потому что пользователь может пропустить видео вперед или назад, поэтому имейте это в виду, когда реализуете это.
Вот как BestDotnetTraining обрабатывает
timeupdate
в любом случае, пользователь может обойти это, используя некоторый метод загрузки, который загружает файл через потоковую передачу. почти c # сделать это из коробки, а для nodejs вы можете использовать
request
модуль. затем вам нужно запустить секундомер, прослушать полученный пакет и сравнить полученный полученный байт с общим размером. таким образом, вы можете рассчитать процент и время, потраченное на получение этого количества процентов. затем используйтеThread.Sleep()
или что-то в этом роде, чтобы задержать поток на сумму, которую вам придется ждать, если вы смотрите видео нормально. также перед сном пользователь может вызвать сервер и обновить полученный процент. поэтому сервер считает, что пользователь на самом деле смотрит видео.вычисление будет примерно таким, например, если вы подсчитаете, что вы уже получили 1 процент, то вы можете рассчитать сумму, которую вы должны ждать, чтобы усыпить поток загрузки. таким образом, вы не можете скачать видео быстрее, чем его фактическая длина. если видео 24 мин. загрузка займет 24 минуты. (плюс порог, который мы ставим в первом методе)
проверьте браузер агента
когда вы обслуживаете веб-страницу и размещаете ссылку на видео или принимаете запрос на обновление, вы можете обратиться к агенту браузера. если он другой, то забанить пользователя.
просто знайте, что какой-то старый браузер не передает эту информацию. поэтому вы должны игнорировать это, когда агент браузера не присутствует ни в запросе видео, ни в запросе веб-страницы. но если у одного запроса есть, а у другого нет, то вам следует забанить пользователя.
Чтобы обойти это, пользователь может установить заголовок агента браузера вручную так же, как и браузер без монитора, который они используют для захвата ссылки на скачивание.
проверьте заголовок реферера
когда реферер - это что-то отличное от URL вашего хоста или URL страницы, на которой вы размещаете видео, вы можете заблокировать пользователя, потому что он поместил ссылку на скачивание в другую вкладку или другое приложение. даже вы можете сделать это для запроса обновления.
для этого необходимо иметь отображение видео и страницу, которая показывает это видео. Вы можете создать соглашение или шаблон, чтобы понять, каким должен быть URL, это зависит от вашего дизайна.
чтобы обойти это, пользователь может установить заголовок реферера вручную, равный URL страницы загрузки при загрузке видео.
Рассчитать время между запросами
если вы получаете так много запросов, что время между ними одинаково, то вам следует заблокировать пользователя. Вы должны указать это, чтобы узнать, сколько времени проходит между запросом на генерацию видео ссылки. если они одинаковы (плюс / минус некоторый порог) и это происходит более чем несколько раз, то вы можете забанить пользователя. потому что если есть бот, который будет сканировать ваш сайт или видео, то обычно они имеют одинаковое время ожидания между запросами. так что если вы получаете каждый запрос, например, каждые 1,3 (плюс / мин, некоторое отклонение) минуты. тогда вы поднимаете тревогу. для этого вы можете использовать статистический расчет, чтобы узнать отклонение между запросами.
Чтобы обойти это, пользователь может установить произвольное время ожидания между запросами.
образец кода
У меня есть репозиторий PluralSight-Downloader, который делает это на полпути. Я создал этот репо почти 5 лет назад. Поскольку я написал его для учебных целей и только для личного использования, репозиторий до сих пор не получил никаких обновлений, и я не собираюсь обновлять или облегчать работу с ним. это просто пример того, как это можно сделать.
источник
Ты можешь использовать
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/controlsList
Это не мешает сохранять видео, но оно удаляет кнопку загрузки и опцию «Сохранить как» в контекстном меню.
источник
Короткий ответ: зашифруйте ссылку, как это делает youtube, не знаю как, чем спросить youtube / google о том, как они это делают. (На всякий случай, если вы хотите, чтобы прямо в точку.)
Я хотел бы указать кому-либо, что это возможно, потому что это делает YouTube, и если они могут, то может любой другой веб-сайт, и это не из браузера, потому что я протестировал его на нескольких браузерах, таких как Microsoft Edge и Internet Explorer и так что есть способ отключить его и увидеть, что люди все еще говорят это ... Я пытаюсь найти ответ, потому что если YouTube может, то должен быть способ и единственный способ увидеть, как они это делают, если кто-то заглянул в сценарии YouTube, которые я делаю сейчас. Я также проверил, было ли это пользовательское контекстное меню, и это не потому, что контекстное меню переполняет элемент inspect, и я имею в виду, что оно поверх него, и я посмотрел, и он никогда не создает новый класс, а также на самом деле невозможно получить доступ к элементу проверки с помощью JavaScript, так что это не может быть. Когда вы дважды щелкаете правой кнопкой мыши по видео на YouTube, вы можете сказать, что оно вызывает контекстное меню для Chrome. Кроме того ... YouTube не добавил бы эту функцию. Я занимаюсь исследованием и просматриваю источник YouTube, поэтому я вернусь, если найду ответ ... если кто-то скажет, что вы не можете, чем, ну, они не сделали " не делаю исследования, как у меня. Единственный способ скачать видео с YouTube - это скачать видео.
Хорошо ... Я провел исследование, и мое исследование остается в том, что вы можете отключить его, за исключением того, что нет никакого javascript к нему ... Вы должны быть в состоянии зашифровать ссылки на видео, чтобы иметь возможность отключить его, потому что я думаю, что любой браузер не покажет его, если не сможет его найти, и когда я открыл ссылку на видео на YouTube, он показывался как «blob: https://www.youtube.com/e5c4808e-297e-451f-80da-3e838caa1275"без кавычек, поэтому он шифрует его, чтобы его нельзя было сохранить ... вам нужно знать php для этого, но, как и ответ, который вы выбрали, чтобы сделать его сложнее, youtube делает его самым сложным из тяжелых шифрований, вы должны быть продвинутый программист php, но если вы не знаете этого, то возьмите человека, которого вы выбрали, как лучший ответ, который затруднит его загрузку ... но если вы знаете php, чем зашифрованный, зашифруйте ссылку на видео, чтобы ее можно было только прочитать ваш ... я не знаю, как объяснить, как они это делают, но они сделали, и есть способ. Способ, которым YouTube шифрует видео, довольно умный, так что если вы хотите узнать, как это сделать, просто спросите youtube / google о том, как они делают это ... надеюсь, это поможет вам, хотя вы уже выбрали лучший ответ. Так что шифрование ссылки лучше всего в короткие сроки.
источник
Кажется, что потоковое видео через websocket является жизнеспособным вариантом, как в случае потоковых кадров и их рисования на холсте.
Потоковое видео через веб-сокеты с использованием JavaScript
Я думаю, что это обеспечило бы другой уровень защиты, затруднивший получение клиентом видео и, конечно, решение вашей проблемы с помощью контекстного меню правой кнопкой мыши «Сохранить видео как ...» (перебор?!).
источник
Вот что я сделал:
источник
У @ Clayton-Graul было то, что я искал, за исключением того, что мне нужна была версия CoffeeScript для сайта, использующего AngularJS. На тот случай, если вам это тоже понадобится, вот что вы вставили в рассматриваемый контроллер AngularJS:
"странные вещи в круге k" (это правда)
источник