Jak mogę uniemożliwić użytkownikowi edycję mojego kodu w przeglądarce?

11

Opis

Projektuję aplikację Node.JS (bardziej jak pełną stronę internetową). Aplikacja wyśle ​​pięć plików JavaScript i będzie zawierać <script>tagi łączące je ze sobą.

Pytanie

Jak mogę uniemożliwić użytkownikom i atakującym przeglądanie i edytowanie mojego kodu ?

  • Przykładem może być:

    • Ctrl+ Shift+I

    • W Devtools , goto Sources , wybierz plik do edycji (tj. index.html) I wpisz zmiany

    • Naciśnięcie Ctrl+ Sspowoduje edycję na żywo

Chciałbym zapobiegać przytoczeniu powyższego przykładu ... Czy to możliwe?


Oto co myślałem:

Stworzę inny plik JavaScript po stronie klienta, prevent_keys.js

Będzie nasłuchiwał Ctrl+ Shift+ I.

Jeśli zwróci true(tzn. Naciśnięto klawisze), to zrobi logto.

Jednak to nie powstrzyma użytkownika przed bezpośrednim używaniem Devtools.

Edwin Pratt
źródło
16
Nie możesz uniemożliwić komukolwiek zobaczenia lub modyfikacji twojego javascript działającego w przeglądarce. Żargon.
jfriend00
7
To, że odpowiedź na pytanie brzmi „nie możesz”, nie oznacza, że ​​należy je zlekceważyć.
RubberDuck,
1
Bardzo ściśle powiązane pytanie: sprawdzanie poprawności JavaScript tylko w formularzu AJAX . Zwłaszcza sprawdź przyjętą odpowiedź z jej trywialnym przykładem, jak wysłać wezwanie POST, które na twój serwer wygląda identycznie jak to, które otrzymałeś od twojego klienta, mimo że nawet nie pochodzi z przeglądarki internetowej.
8bittree

Odpowiedzi:

35

Dosłownie nie możesz uniemożliwić użytkownikom dostępu do treści, które im wysyłasz, i modyfikowania ich. Nie masz kontroli nad przeglądarką, z której przeglądarki korzystają ani czy faktycznie pobierają kod źródłowy za pośrednictwem przeglądarki. Wykonujesz swój kod na urządzeniu innej osoby. Nie należy i nie można zakładać niczego o integralności tego urządzenia.

Jeśli masz kod, którego nie chcesz ujawniać, nie wysyłaj go do przeglądarki. Zamiast tego pozwól przeglądarce wysłać zapytanie do serwera, na którym wykonujesz tajny kod.

Jako konkretny przykład nie sprawdzaj haseł na kliencie. Klient można zmodyfikować, aby zawsze informował serwer „hasło było prawidłowe”. Zamiast tego uwierzytelnianie musi odbywać się na zaufanym serwerze.

amon
źródło
4
„Klient można zmodyfikować, aby zawsze informował serwer, że„ hasło jest prawidłowe ”.” kaszel libssh kaszel
Philip Kendall
Wielkie dzięki! Wysyłałem programy do logowania, wylogowania i rejestracji. Zmieniłem to na trasy na serwerze.
Edwin Pratt,
23

Nie możesz Jedna z podstawowych zasad informatyki: nie można ufać klientowi . Jakikolwiek sprytny plan wymyślisz, mogę go obejść, jeśli mam kontrolę nad klientem.

Philip Kendall
źródło
2
Przeniosłem wszystkie procedury sprawdzania poprawności, przesyłania, pobierania i obsługi userAccouts () na serwery.
Edwin Pratt,
1
„Nie możesz ufać klientowi” to tylko jedna strona medalu. Druga strona mówi: „Nie jesteś właścicielem klienta”. Przeglądarka, która obsługuje skrypt javascript, nie jest twoja, system operacyjny, który obsługuje przeglądarkę, nie jest twój, a sprzęt, na którym działa przeglądarka, nie jest twój. Cokolwiek właściciel tych rzeczy dzieje się z danymi, które do nich wysyłasz, to nie twoja sprawa . Szacunek dla Twoich klientów polega na tym, że nie próbują uzurpować sobie swoich rzeczy.
cmaster
2

Dlaczego nie chcesz modyfikować kodu?

Bezpieczeństwo? Zaufanie? Tajemnica handlowa?

Następnie nie wysyłaj kodu, poproś klienta o wysłanie żądania i zwrócenie wyniku. Może nie wynik prywatny lub uprzywilejowany, wystarczy zrobić wiele dla wielu interfejsów użytkownika.

Ponieważ nieznacznie zmodyfikowane wersje własnego kodu szkodzą dolnej linii?

Użyj zaciemniacza kodu, narzędzia zmieniającego nazwy i trywialnych segmentów kodu.

Techniki te podnoszą poprzeczkę na faktycznym poziomie umiejętności, a oprzyrządowanie wymagane do wykonania niewielkiego wariantu witryny. Pamiętaj tylko, że te techniki mogą spowolnić twój kod, wprowadzić interesujące i bezsensowne błędy i komunikaty o błędach, a mimo to mogą zostać przezwyciężone przez osobę posiadającą odpowiednie narzędzia i / lub umiejętności. Więc naprawdę zastanów się, czy to jest tego warte. Na koniec każdy mógł po prostu napisać ten sam kod.

Kain0_0
źródło