Szyfrowanie linków na stronie - jak?

Witajcie,

 

Potrzebuje zaszyfrować na swojej stronie parę linków wychodzących bezpośrednio do plików filmowych, ktore trzymam na innym serwerze niż moja strona.

 

Chce uzyskać taki efekt, że w kodzie źródłowym strony nie będzie widoczny bezpośredni link do filmiku, tylko zaszyfrowany (by nikt nie mógł sobie po prostu w ten link wejść i pobrać wideo), ale żeby player na mojej stronie nie miał problemu z odczytaniem i odtworzeniem filmiku.

 

Czytałem coś o bibliotece CryptoJS, ale nie do końca wiem jak użyć tego w praktyce.

 

Języki, które mogę użyć to html, css, javascript.

 

Macie jakieś pomysły?

Jeśli deszyfrować będziesz po stronie klienta to tak czy siak użytkownik będzie mógł sobie sam na własną rękę je odszyfrować. Lepiej powiedz dlaczego chcesz takie coś zrobić, bo to od tego głównie będzie zależał sposób implementacji takiego rozwiązania.

Dlaczego? Ponieważ są to moje autorskie filmy i nie chcę, by ktokolwiek sobie je przywłaszczał.

 

A co do tego, że jeżeli użytkownik będzie chciał pozyskać ten film to i tak go uzyska w jakiś bardziej skomplikowany sposób to mnie nie interesuje.

Ważne, żeby link w kodzie źródłowym był jakoś zamaskowany i odpychał leni, którzy używają tylko kodu źródłowego a nie jakiś bardziej specjalistycznych narzędzi.

 

Mam nadzieje, że rozumiesz o co mi chodzi i będziesz w stanie mi pomóc :slight_smile:

Moim zdaniem nie da się tego zabezpieczyć na 100%, jeśli ma to działać w JS, czyli po stronie przeglądarki, użytkownik i tak zobaczy link jak pisał @Fizyda 

Link to link, jakbyś go nie zapisał będzie to link. Każdy kto wpisze sobie w google “ściąganie filmów w przeglądarce” albo coś w ten deseń sobie ten film ściągnie - nawet jeśli ten link schowasz w kodzie. Musiałbyś sobie napisać własny odtwarzacz z własnym formatem filmu, a z tmp korzystać tylko w kawałkach by  w/w soft nie będzie go obsługiwał. a nawet wtedy ktoś sobie ściągnie soft do nagrywania pulpitu ;)

 

To nie te czasy gdy do zrobienia czegoś trza było coś potrafić. Do wszystkiego są gotowce ;)

Chyba mnie nie rozumiecie…

 

Po prostu chce, by w kodzie źródłowym strony nie widniał gołym okiem link bezpośredni do filmiku tylko jakiś kod czy cuś, by przeciętny Kowalski po prostu nie skopiował linku i nie pobrał filmu.

 

Dobrze wiem, że są programy, które potrafią każde wideo wydobyć ze strony, ale to mnie nie obchodzi, gdyż chodzi mi tylko o widoczność linku w kodzie źródłowym.

 

Prościej chyba nie da się tego wyjaśnić :stuck_out_tongue:

Kiedy chcesz deszyfrować linki? Bo skoro nie chcesz by ktoś podejrzał sobie w kodzie link, to po co go w ogóle umieszczać na stronie. Gdy będziesz miał link w formie zaszyfrowanej to nie będzie on działał do czasu aż go nie odszyfrujesz, a jeśli to zrobisz można będzie go podejrzeć w kodzie.

 

Sam widzisz to się kupy nie trzyma i się wyklucza. Chyba że masz zamiar zrobić coś ala limitowanego dostępu do filmu, np dla konkretnych użytkowników (z odpowiednimi uprawnieniami) lub za opłatą.

Początkowo myślałem że nie chcesz by bot pobierające czysty html mogły linki skopiować (te które nie wykonują kodu JS), w takim wypadku można by np. zaszyfrować po stronie serwera link za pomocą base64 i odszyfrować go po stronie przeglądarki przy użyciu JS. Przy czym wchodząc w źródło strony będziesz widział link.

 

Wszystko rozgrywa się o to kiedy i komu chcesz odszyfrować link oraz jak bezpiecznego rozwiązania szukasz. Jeśli chcesz tylko przerazić kogoś możesz zaszyfrować jak wspomnąłem link za pomocą base64, i zablokować przy pomocy JS przejście po kliknięciu w ten link do “dziwnej” strony tylko pobrać jej adres odszyfrować i za pomocą JS’a przejść do niej. Przy czym nie widzę w tym sensu skoro każdy może kliknąć w link i przejść do strony z filmem gdzie będzie miał już adres url filmu w pasku adresu przeglądarki.

Nie wiem przed czym miałoby to chronić i po co ktoś ma zaglądać do kodu strony skoro link do filmu widnieje w adresie strony na której jest film.

https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding

Szczerze mówiąc to nie miałem nigdy dużej styczności z JS, także byłbym bardzo więczny gdybyś mógł mi napisać szablon jak to ma wyglądać :stuck_out_tongue:

 

W takim wypadku najprościej jest zrobić kontrastujący znak wodny, imię i nazwisko, adres twojej strony, cokolwiek.

 

 

Przecież masz przykłady na podanej stronie. Poza tym ciężko zrobić przykład bo nie bardzo wiadomo co Ty chcesz osiągnąć tym oraz w jaki sposób chcesz by to działało.

Dodatkowo tak czy siak zmiany będą potrzebne też po stronie skryptu serwera, bo to on powinien zakodować link.

Wpisz sobie w wyszukiwarkę taką frazę “JavaScript obfuscator” i może znajdziesz rozwiązanie swojego problemu :).

Twoim problemem jest błędne mniemanie o tym że Kowalski zagląda w źródło strony, on sobie ściągnie program do ściągnięcia zawartości :stuck_out_tongue:

Szyfrowanie ci się nie przyda, bo i tak wszystko odbywa się po stronie użytkownika. Base64 to kompresja, a nie szyfrowanie i otrzymasz krótszy/dłuższy ciąg znaków. I tak finalnie będzie to w formie jawnej.

Inną metodą wychodzi ci nic innego jak:

  • zmienna klucz (np. 123)
  • dane (np. 321)
  • odszyfrowanie danych z pomocą klucza (np. dane+klucz)
  • wynik (np. 444)

Takie coś nie ma sensu, bo i tak prędzej czy później to “zabezpieczenie” zostanie ominięte. Prawdę mówiąc - każdy plik (w tym filmy) jest ściągany (nawet czasem na dysk!) przez przeglądarkę użytkownika.

Odtwarzacze we Flashu nie mają sensu, ponieważ przeglądarki zaczynają powoli przestawać wspierać go (np. Chrome). Odtwarzacz w HTML5 i JS stanowi większy sens, jednak co ci to da, skoro i tak użytkownik musi ściągnąć plik, a finalnie adres ma w postaci jawnej (musisz przypisać zdekodowany tekst do atrybutu tagu video/audio).

 

Takie coś może tylko minimalnie spowolnić wydobycie linku.

Zgadzam się, ale jedna mała uwaga, base64 nie jest to algorytm kompresji tylko kodowania, kompresja zachodzi gdy zawsze plik wynikowy będzie o tej samej pojemności lub mniejszej co źródłowy. Tutaj mamy do czynienia z kodowaniem do transmisji, chodziło o to że czasami w niektórych systemach/środowiskach może być problem z przesłaniem danych jeśli nie zgadza się liczba bajtów i ciężko jest dane podzielić na wszystkie ramki. W tedy by nie nie dopełniać ostatniej zerami lub jedynkami i żeby drugi system miał pewność jakie dane otrzymał używa się base64 by dane zawsze dobrze się dzieliły w transmisji danych.

Zaproponowałem takie rozwiązanie bo jest ono tańsze i łatwiejsze we wdrożeniu niż dane zaszyfrowane + klucz gdzie klucz prywatny jest dostępny publicznie. Nie ma to sensu szkoda obciążać procesor i komplikować implementacje.

Skoro autor chce tylko, aby linków nie było widać na pierwszy rzut oka, to może coś takiego wystarczy:

<script>

	function decode(obj) {		

		document.getElementById('v').src = atob(obj.getAttribute('data-link'));

		document.getElementById('v').play();

	}

</script>



<h1><a href="#" data-link="aHR0cDovL3BlYWNoLnRoZW1henpvbmUuY29tL2R1cmlhbi9tb3ZpZXMvc2ludGVsLTEwMjQtc3Vycm91bmQubXA0" onclick="decode(this); return false;">Odtwórz ten zaszyfrowany link!</a></h1>



<video controls id="v"></video>

https://jsfiddle.net/4qxcobmo/

 

Po kliknięciu linka “deszyfrowany” jest właściwy odnośnik i filmik się ładuje do odtwarzacza.

Chodzi ci o to żeby link był widoczny tylko z twojej strony a nie  z jakiegoś innego miejsca.To jest jakoś do zrobienia gdyby umieścić ten film wewnątrz sieci prywatnej i musiałbyś napisać player który by wyświetlał dany film z sieci prywatnej na twojej stronie,wtedy jak ktoś chciałby podejrzć link to by miał coś takie http://192.168.x.x/dalszy/adres/plik.avi i po kliknieciu go by go przekierowało do jego własnej sieci.Tylko to jest dużo zabawy i raczej nie warto bo jak ktoś sie uprze to nawet podczas ogladania tego filmu właczy sobie program do nagrywania z pulpitu i ci ten film ściągnie na upartego.Ogólnie szkoda zachodu.

Ciekawi mnie jak chcesz publicznie coś udostępnić jednocześnie tego nie udostępniając :wink:

Player działa u klienta, więc jak miałbyś ten link odtworzyć w sposób w jaki go przedstawiłeś ? 

Jak koniecznie chcesz coś takiego zrobić żeby sie nie dało kopiowac filmu przez skopiowanie linku,to możesz zrobić tak:

1.Masz serwer na którym masz strone www

2.Masz 2 serwer na którym masz filmy

3.Podłączasz sie z serwera www do serwera z filmami przez tunel VPN

4.Player który odtwarza filmy na  stronie ww pobiera je przez z VPN z serwera z filmami i adresy są typu

http://10.x.y.z/plik.avi

 

Wtedy jak ktoś zechce skopiować link do filmu to mu wyskoczy error 404 lub not found.

Ale użytkownik nie podłącza sobie monitora do serwera, tylko korzysta do tego z swojej przeglądarki. Daj może jakiś przykład :wink:

Jedyne rozwiązanie to imo generowanie kluczy jednorazowych, jednak twojego pomysłu z tym ip z sieci lokalnej / vpn nie potrafię pojąć