Jak wyłączyć opcję „Zapisz wideo jako ...” w menu przeglądarki wyświetlanym po kliknięciu prawym przyciskiem myszy, aby uniemożliwić klientom pobieranie wideo?
Czy istnieją bardziej kompletne rozwiązania, które uniemożliwiają klientowi bezpośredni dostęp do ścieżki pliku?
File→Save As
). Nawet jeśli możesz to w jakiś sposób zablokować, mogą przeglądać źródło, aby znaleźć adres URL pliku. Nawet jeśli możesz to trochę ukryć, mogą wyrwać to z pamięci podręcznej. Nawet jeśli możesz to skomplikować (np. Streamowanie), mogą przechwycić ruch sieciowy za pomocą sniffera lub czegoś podobnego. Faktem jest, że jeśli wyślesz go do użytkownika, może go zapisać. Nie da się tego obejść. Pytanie, które musisz zadać, brzmi, dlaczego musisz tak bardzo to zatrzymać. Czy to naprawdę jest konieczne? Czy jest to warte wysiłku i nieprzyjazne dla użytkownika?Odpowiedzi:
Nie możesz . Dzieje się tak, ponieważ do tego celu zostały zaprojektowane przeglądarki: do obsługi treści . Ale możesz utrudnić pobieranie .
Po pierwsze, ty mogłoby wyłączyć
contextmenu
zdarzenie , alias „prawo kliknięcie”. Zapobiegnie to rażącemu zgrywaniu twojego wideo przez zwykłe skiddie, klikając prawym przyciskiem myszy i Zapisz jako. Ale wtedy mogliby po prostu wyłączyć JS i obejść ten problem lub znaleźć źródło wideo za pomocą debugera przeglądarki. Poza tym to zły UX. W menu kontekstowym jest wiele prawdziwych rzeczy niż tylko Zapisz jako.Możesz także użyć niestandardowych bibliotek odtwarzaczy wideo. Większość z nich implementuje odtwarzacze wideo, które dostosowują menu kontekstowe do własnych upodobań. Więc nie dostajesz domyślnego menu kontekstowego przeglądarki. A jeśli kiedykolwiek wyświetlą pozycję menu podobną do opcji Zapisz jako, możesz ją wyłączyć. Ale znowu, jest to obejście JS. Słabe strony są podobne do poprzedniej opcji.
Innym sposobem jest wyświetlenie wideo przy użyciu przesyłania strumieniowego HTTP na żywo . Zasadniczo polega na pocięciu wideo na kawałki i wyświetleniu go jeden po drugim. W ten sposób większość witryn do przesyłania strumieniowego obsługuje wideo. Więc nawet jeśli uda ci się zapisać jako, zapisujesz tylko fragment, a nie cały film. Zebranie wszystkich fragmentów i zszycie ich za pomocą specjalnego oprogramowania wymagałoby nieco więcej wysiłku.
Inną techniką jest pomalować
<video>
na<canvas>
. W tej technice, z odrobiną JavaScript, widzisz na stronie<canvas>
element renderujący ramki z ukrytego<video>
. A ponieważ jest to<canvas>
, menu kontekstowe użyje<img>
menu a, a nie<video>
'. Otrzymasz Zapisz obraz jako zamiast Zapisz wideo jako.Możesz również użyć tokenów CSRF na swoją korzyść. Twój serwer wyśle token na stronę. Następnie używasz tego tokena, aby pobrać wideo. Twój serwer sprawdza, czy jest to prawidłowy token, zanim wyświetli wideo, lub pobierze HTTP 401 . Chodzi o to, że wideo można uzyskać tylko za pomocą tokena, który można uzyskać tylko wtedy, gdy przeszedłeś ze strony, a nie bezpośrednio odwiedzając URL wideo.
Pod koniec dnia po prostu przesyłałem swój film do witryny wideo innej firmy, takiej jak YouTube lub Vimeo. Mają dobre narzędzia do zarządzania wideo, optymalizują odtwarzanie na urządzeniu i dokładają wszelkich starań, aby zapobiec zgrywaniu filmów bez żadnego wysiłku z Twojej strony.
źródło
src
z<video>
. Do czasu załadowania strony baza danych ma token, a strona ma token. Po<video>
rozpoczęciu ładowania (uzyskuje dostęp do punktu końcowego), serwer sprawdza, czy token znajduje się w bazie danych, usuwa go i przesyła strumieniowo plik. Jeśli token nie istnieje w wyniku drugiego dostępu , nie przesyłaj strumieniowo pliku.Jest to proste rozwiązanie dla tych, którzy chcą po prostu usunąć opcję „zapisz” prawym przyciskiem myszy z filmów HTML5
źródło
src
atrybut i otwórz go w innej karcie lub użyj,wget
aby go pobrać!Prosta odpowiedź,
NIE MOŻESZ
Jeśli oglądają Twój film, to już go mają
źródło
Tak, możesz to zrobić w trzech krokach:
Zapisz plik w tym podkatalogu o nazwie „.htaccess” i dodaj poniższe wiersze.
Teraz łącze źródłowe jest bezużyteczne , ale nadal musimy się upewnić, że żaden użytkownik próbujący pobrać plik nie może bezpośrednio udostępnić pliku.
Aby uzyskać pełniejsze rozwiązanie , wyświetlaj teraz wideo za pomocą odtwarzacza flash (lub płótna html) i nigdy nie łącz bezpośrednio z wideo. Aby po prostu usunąć menu prawego przycisku myszy, dodaj do kodu HTML:
Wynik:
Witryna www.foo.com/player.html będzie poprawnie odtwarzać wideo , ale jeśli odwiedzisz www.foo.com/videos/video.mp4:
To zadziała w przypadku bezpośredniego pobierania, cURL, hotlinkowania, możesz to nazwać.
To jest pełna odpowiedź na dwa zadane pytania, a nie odpowiedź na pytanie: „czy mogę uniemożliwić użytkownikowi pobieranie pliku wideo, który już pobrał”.
źródło
.htaccess
treściNajlepszy sposób, z którego zwykle korzystam, jest bardzo prosty, całkowicie wyłączam menu kontekstowe na całej stronie, czysty html + javascript:
Otóż to! Robię to, ponieważ zawsze możesz zobaczyć źródło, klikając prawym przyciskiem myszy.
Ok, mówisz: „Mogę używać bezpośrednio źródła widoku przeglądarki” i to prawda, ale zaczynamy od tego, że NIE MOŻESZ przestać pobierać
html5
filmów.źródło
Jako programista po stronie klienta zalecam użycie adresu URL obiektu blob, adres URL obiektu blob to adres URL po stronie klienta, który odnosi się do obiektu binarnego
w HTML pozostaw wideo
src
puste, aw JS pobierz plik wideo za pomocą AJAX, upewnij się, że typ odpowiedzi to blobUwaga: ta metoda nie jest zalecana w przypadku dużych plików
EDYTOWAĆ
Użyj blokowania między źródłami, aby uniknąć bezpośredniego pobierania
jeśli wideo jest dostarczane przez interfejs API Użyj innej metody (PUT / POST) zamiast „GET”
źródło
PHP wysyła tag wideo html5 razem z sesją, w której klucz jest losowym ciągiem znaków, a wartością jest nazwa pliku.
Teraz PHP jest proszone o przesłanie wideo. PHP odzyskuje nazwę pliku; usuwa sesję i natychmiast wysyła wideo. Dodatkowo muszą być obecne wszystkie nagłówki „no cache” i typu MIME.
Teraz, jeśli użytkownik skopiuje adres URL do nowej karty lub skorzysta z menu kontekstowego, nie będzie miał szczęścia.
źródło
Możesz przynajmniej powstrzymać osoby nieobeznane z technologią przed użyciem menu kontekstowego prawego przycisku myszy, aby pobrać wideo. Możesz wyłączyć menu kontekstowe dla dowolnego elementu za pomocą atrybutu oncontextmenu.
Działa to w przypadku elementu body (całej strony) lub tylko pojedynczego wideo używającego go wewnątrz tagu wideo.
źródło
Skończyło się na korzystaniu z AWS CloudFront z wygasającymi adresami URL. Film zostanie załadowany, ale do czasu, gdy użytkownik kliknie prawym przyciskiem myszy i wybierze opcję Zapisz jako, adres URL wideo, który otrzymali, wygasł. Wyszukaj tożsamość CloudFront Origin Access.
Utworzenie adresu URL wideo wymaga pary kluczy, którą można utworzyć w interfejsie wiersza polecenia AWS. FYI to nie jest mój kod, ale działa świetnie!
źródło
Moglibyśmy to utrudnić, ukrywając menu kontekstowe, na przykład:
źródło
Prosty sposób +1 i między przeglądarkami: Możesz również umieścić przezroczysty obraz na wideo z indeksem z css i kryciem. Dlatego użytkownicy zobaczą w menu kontekstowym „zapisz obraz jako” zamiast „zapisz wideo”.
źródło
Plik
nie działa. Chrome i Opera od czerwca 2018 r. Mają podmenu na osi czasu, które umożliwia bezpośrednie pobieranie, więc użytkownik nie musi klikać prawym przyciskiem myszy, aby pobrać ten film. Co ciekawe, Firefox i Edge tego nie mają ...
źródło
Korzystanie z usługi takiej jak Vimeo: Zaloguj się
Vimeo > Goto Video > Settings > Privacy > Mark as Secured
, a także wybierz osadzone domeny. Po ustawieniu domen osadzania nikt nie będzie mógł osadzać wideo ani wyświetlać go z przeglądarki, chyba że nastąpi połączenie z określonych domen. Tak więc, jeśli masz zabezpieczoną stronę na serwerze, która ładuje odtwarzacz Vimeo w ramce iframe, utrudnia to poruszanie się.źródło
Przede wszystkim zdaj sobie sprawę, że niemożliwe jest całkowite zapobieżenie pobieraniu wideo, wystarczy, że utrudnisz to . Oznacza to, że ukrywasz źródło wideo.
Przeglądarka internetowa tymczasowo pobiera wideo w buforze, więc gdybyś mógł uniemożliwić pobieranie, uniemożliwiłbyś również oglądanie wideo.
Powinieneś również wiedzieć, że <1% całej populacji świata będzie w stanie zrozumieć kod źródłowy, co i tak jest raczej bezpieczne. Nie oznacza to, że nie powinieneś również ukrywać tego w źródle - powinieneś .
Powinieneś nie wyłączyć kliknij prawym przyciskiem myszy, a nawet mniej powinien pojawić się komunikat mówiący
"You cannot save this video for copyright reasons. Sorry about that."
. Jak zasugerowano w tej odpowiedzi .Może to być bardzo denerwujące i mylące dla użytkownika. Oprócz tego; jeśli wyłączą JavaScript w swojej przeglądarce, to zrobią mógł i tak kliknąć prawym przyciskiem myszy i zapisać.
Oto sztuczka CSS, której możesz użyć:
CSS nie może zostać wyłączony w przeglądarce, chroniąc wideo bez wyłączania prawego przycisku myszy. Jednak jest jeden problem
controls
nie można ich również włączyć, innymi słowy, muszą być ustawionefalse
. Jeśli zamierzasz wdrożyć własną funkcję Play / Pause lub użyć interfejsu API, który ma przyciski oddzielne odvideo
tagu, jest to wykonalna opcja.controls
posiada również przycisk pobierania, więc używanie go też nie jest dobrym pomysłem.Oto JSFiddle przykład .
Jeśli zamierzasz wyłączyć kliknięcie prawym przyciskiem myszy za pomocą JavaScript, zapisz również źródło wideo w JavaScript. W ten sposób, jeśli użytkownik wyłączy JavaScript (pozwalając na kliknięcie prawym przyciskiem myszy), wideo nie zostanie załadowane (również trochę lepiej ukrywa źródło wideo).
Z odpowiedzi TxRegex :
Teraz dodaj wideo za pomocą JavaScript:
Funkcjonalne JSFiddle
Innym sposobem zapobiegania kliknięciu prawym przyciskiem jest użycie
embed
tagu. Nie zapewnia to jednak elementów sterujących do uruchomienia wideo, więc musiałyby być wprowadzone w JavaScript:źródło
pointer-events: none;
cóż, nie możesz tego chronić w 100%, ale możesz to utrudnić. z tymi metodami, które wyjaśniam, zetknąłem się z nimi studiując metody ochrony w PluralSight i BestDotNetTraining . niemniej jednak żadna z tych metod nie powstrzymała mnie przed pobraniem tego, czego chcę, ale trudno mi było wybrać program do pobierania, aby przekazał ich ochronę.
Oprócz innych wymienionych metod, aby wyłączyć menu kontekstowe. użytkownik nadal może korzystać z narzędzi innych firm, takich jak InternetDownload Manager lub inne podobne oprogramowanie, aby pobrać filmy. metoda ochrony, którą tutaj wyjaśniam, polega na złagodzeniu tego oprogramowania innych firm.
Wymóg wszystkich tych metod polega na blokowaniu użytkownika, gdy zidentyfikujesz, że ktoś pobiera Twoje filmy. w ten sposób mogą pobrać tylko jeden lub dwa filmy tylko przed zablokowaniem im dostępu do Twojej witryny.
zrzeczenie się
Nie przyjmuję żadnej odpowiedzialności, jeśli ktoś nadużyje tych metod lub użyje ich do zaszkodzenia innym lub stronom internetowym, o których wspomniałem jako przykład. służy tylko do dzielenia się wiedzą, aby pomóc Ci chronić swój produkt intelektualny.
generować linki z wygaśnięciem
warunkiem jest utworzenie łącza pobierania dla każdego użytkownika. że można go łatwo obsłużyć przez Azure Blob Storage lub Amazon S3. możesz utworzyć łącze pobierania z dwukrotnie dłuższym znacznikiem czasu wygaśnięcia wideo. następnie musisz przechwycić to łącze wideo i żądany czas. jest to konieczne w przypadku następnej metody. Połów tej metody polega na tym, że generujesz łącze pobierania, gdy użytkownik kliknie przycisk odtwarzania.
w przypadku przycisku odtwarzania wyślesz żądanie do serwera, otrzymasz łącze i zaktualizujesz źródło.
ogranicz szybkość żądań wideo
następnie monitorujesz, jak szybko użytkownik żąda drugiego filmu. jeśli użytkownik zażąda linku do pobrania zbyt szybko, blokujesz go od razu. nie możesz ustawić tego progu zbyt wysoko, ponieważ możesz omyłkowo zablokować użytkowników, którzy tylko przeglądają lub przeglądają filmy.
Włącz zakres HTTP
użyj biblioteki js, takiej jak videojs, aby odtworzyć wideo, musisz również zwrócić AcceptRange w nagłówku. Usługa Azure Blob Storage obsługuje to po wyjęciu z pudełka. w ten sposób przeglądarka zaczyna pobierać fragment wideo po fragmencie. zwykle 32 bajty na 32 bajty. Następnie musisz słuchać
timeupdate
zmian wideo i aktualizować serwer o procent oglądania wideo. procent obejrzenia filmu nie może być większy niż procent dostarczenia filmu. a jeśli dostarczasz treści wideo bez zmiany procentowej, możesz zablokować użytkownika. bo na pewno pobierają.implementacja tego jest trudna, ponieważ użytkownik może przeskakiwać wideo do przodu lub do tyłu, więc bądź świadomy tego, kiedy to wdrażasz.
w ten sposób BestDotnetTraining obsługuje
timeupdate
w każdym razie użytkownik może obejść ten problem, używając metody pobierania, która pobiera plik za pośrednictwem przesyłania strumieniowego. prawie c # zrób to po wyjęciu z pudełka, a dla nodejs możesz użyć
request
module. Następnie musisz uruchomić stopWatch, odsłuchać otrzymaną paczkę i porównać łączną liczbę otrzymanych bajtów z całkowitym rozmiarem. w ten sposób możesz obliczyć procent i czas poświęcony na uzyskanie tej ilości procentu. następnie użyjThread.Sleep()
lub czegoś podobnego, aby opóźnić wątek o kwotę, którą musisz czekać, jeśli oglądasz wideo normalnie. również przed zaśnięciem użytkownik może zadzwonić do serwera i zaktualizować otrzymaną wartość procentową. więc serwer myśli, że użytkownik faktycznie ogląda wideo.obliczenie będzie wyglądało mniej więcej tak, na przykład, jeśli obliczysz, że do tej pory otrzymałeś 1 procent, to możesz obliczyć kwotę, którą powinieneś poczekać, aby uśpić wątek pobierania. w ten sposób nie możesz pobrać filmu szybciej niż jego rzeczywista długość. jeśli film trwa 24 min. pobranie go zajmie 24 minuty. (plus próg, który postawiliśmy w pierwszej metodzie)
sprawdź agenta przeglądarki
kiedy obsługujesz stronę internetową i udostępniasz łącze wideo lub akceptujesz żądanie aktualizacji postępu, możesz spojrzeć na agenta przeglądarki. jeśli jest inny, zablokuj użytkownika.
pamiętaj tylko, że stara przeglądarka nie przekazuje tych informacji. więc powinieneś to zignorować, gdy nie ma agenta przeglądarki zarówno w żądaniu wideo, jak i żądaniu strony internetowej. ale jeśli jedno żądanie ma to, a inne nie, to powinieneś zbanować użytkownika.
Aby obejść ten problem, użytkownik może ręcznie ustawić nagłówek agenta przeglądarki tak samo, jak w przeglądarce bezgłowej, której używa do przechwytywania łącza pobierania.
sprawdź nagłówek referer
gdy strona odsyłająca jest czymś innym niż adres URL hosta lub adres URL strony, na której serwujesz wideo, możesz zablokować użytkownika, ponieważ umieścił on łącze pobierania w innej karcie lub innej aplikacji. nawet możesz to zrobić dla żądania aktualizacji postępu.
warunkiem jest mapowanie wideo i strony, która pokazuje ten film. możesz stworzyć jakąś konwencję lub wzorzec, aby zrozumieć, jaki powinien być adres URL, to zależy od twojego projektu.
Aby obejść ten problem, użytkownik może ręcznie ustawić nagłówek strony odsyłającej jako równy adresowi URL strony pobierania podczas pobierania filmów.
Oblicz czas między żądaniami
jeśli otrzymujesz tyle żądań, że czas między nimi jest taki sam, powinieneś zablokować użytkownika. Powinieneś to ustawić, aby uchwycić czas między żądaniem wygenerowania łącza wideo. jeśli są takie same (plus / minus pewien próg) i zdarza się to więcej niż kilka razy, możesz zbanować użytkownika. ponieważ jeśli istnieje bot, który ma zaindeksować twoją witrynę lub filmy, zwykle ma taki sam czas snu między swoimi żądaniami. więc jeśli otrzymasz każde żądanie, na przykład co 1,3 (plus / min trochę odchylenia) minuty. wtedy podnosisz alarm. w tym celu możesz użyć obliczeń statystycznych, aby poznać odchylenie między żądaniami.
aby obejść ten problem, użytkownik może ustawić losowy czas uśpienia między żądaniami.
przykładowy kod
Mam repozytorium PluralSight-Downloader, które robi to w połowie. Stworzyłem to repozytorium prawie 5 lat temu. ponieważ napisałem go tylko do celów edukacyjnych i do własnego użytku osobistego, repozytorium nie otrzymało dotychczas żadnych aktualizacji i nie zamierzam aktualizować ani ułatwiać pracy z nim. to tylko przykład tego, jak można to zrobić.
źródło
Możesz użyć
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/controlsList
Nie zapobiega zapisywaniu wideo, ale usuwa przycisk pobierania i opcję „Zapisz jako” w menu kontekstowym.
źródło
Krótka odpowiedź: Zaszyfruj link tak, jak robi to youtube, nie wiem jak, tylko zapytaj youtube / google, jak to robią. (Na wypadek gdybyś chciał od razu przejść do sedna).
Chciałbym każdemu zwrócić uwagę, że jest to możliwe, ponieważ robi to youtube, a jeśli mogą, to każda inna strona internetowa i nie jest też z przeglądarki, ponieważ przetestowałem to na kilku przeglądarkach, takich jak Microsoft Edge i Internet Explorer i więc jest sposób, aby to wyłączyć i zobaczyłem, że ludzie nadal to mówią ... Próbuję znaleźć odpowiedź, ponieważ jeśli możesz, to musi być sposób, a jedyny sposób, aby zobaczyć, jak to robią, to jeśli ktoś zajrzy skrypty youtube, które teraz robię. Sprawdziłem również, czy to również było niestandardowe menu kontekstowe i nie jest tak, ponieważ menu kontekstowe przepływa przez element inspect i mam na myśli, że jest nad nim i patrzyłem i nigdy nie tworzy nowej klasy, a także nie można uzyskać dostępu do elementu inspect za pomocą javascript, więc nie można. Możesz stwierdzić, że po dwukrotnym kliknięciu wideo z YouTube prawym przyciskiem myszy pojawia się menu kontekstowe dla chrome. Poza tym… youtube nie dodałby tej funkcji. Prowadzę badania i przeglądam źródło youtube, więc wrócę, jeśli znajdę odpowiedź… jeśli ktoś powie, że nie możesz, to dobrze, że nie. nie rób badań, tak jak ja. Jedynym sposobem pobierania filmów z YouTube jest pobieranie wideo.
Okay ... Zrobiłem badania i moje badania pozostają, że możesz je wyłączyć, chyba że nie ma w nim javascript ... musisz być w stanie zaszyfrować linki do wideo, aby móc go wyłączyć, ponieważ myślę, że każdy przeglądarka nie pokaże tego, jeśli nie może go znaleźć, a kiedy otworzyłem link do filmu na youtube, pokazał się jako ten „blob: https://www.youtube.com/e5c4808e-297e-451f-80da-3e838caa1275„bez cudzysłowów, więc szyfruje go, więc nie można go zapisać ... musisz znać php, ale podobnie jak odpowiedź, którą wybrałeś, aby to utrudnić, youtube sprawia, że szyfrowanie jest najtrudniejsze, musisz być zaawansowany programista php, ale jeśli tego nie wiesz, weź osobę, którą wybrałeś, jako najlepszą odpowiedź na utrudnienie jej pobrania ... ale jeśli znasz php niż ciężki, zaszyfruj link wideo, aby można go było czytać tylko twoje ... Nie wiem, jak wyjaśnić, jak to robią, ale zrobili i jest na to sposób. Sposób, w jaki YouTube szyfruje tam filmy, jest całkiem sprytny, więc jeśli chcesz wiedzieć, jak to zrobić, po prostu zapytaj youtube / google o to robią to ... mam nadzieję, że to ci pomoże, chociaż już wybrałeś najlepszą odpowiedź. Więc szyfrowanie łącza jest najlepsze w krótkich terminach.
źródło
Wydaje się, że przesyłanie strumieniowe wideo przez gniazdo sieciowe jest realną opcją, ponieważ przesyłanie strumieniowe ramek i rysowanie ich na płótnie jest czymś w rodzaju.
Przesyłanie strumieniowe wideo przez gniazda sieciowe przy użyciu JavaScript
Myślę, że zapewniłoby to inny poziom ochrony, utrudniając klientowi uzyskanie wideo i oczywiście rozwiązując problem za pomocą opcji menu kontekstowego „Zapisz wideo jako ...” (przesada?!).
źródło
Oto co zrobiłem:
źródło
@ Clayton-Graul miał to, czego szukałem, z wyjątkiem tego, że potrzebowałem wersji CoffeeScript dla strony korzystającej z AngularJS. Na wypadek, gdybyś też tego potrzebował, oto, co umieściłeś w kontrolerze AngularJS:
„dziwne rzeczy szykują się na kole k” (to prawda)
źródło