2010-07-07 13 views
7

Czy istnieją sposoby zapobiegania lub utrudnienia, aby ktoś wprowadził Javascript i manipulował zmiennymi lub funkcjami dostępu? Myślałem, że muszę zmienić losowo wszystkie nazwy var przy każdym ponownym załadowaniu, aby skrypt złośliwego oprogramowania musiał zostać przepisany za każdym razem? Czy są inne, mniej bolesne sposoby?Sposoby na hakowanie kodu JavaScript/wstrzykiwanie/manipulowanie są trudne?

Rozumiem, że w końcu ktoś się włamie, ale chciałbym wiedzieć, jak trudno jest odtworzyć to działanie, aby ludzie nie publikowali skryptozakładki lub czegoś podobnego do użycia przez wszystkich. Nie dbam o to, czy eksperci odnajdą się w kodzie, ale chciałbym, żeby był nieco bardziej skomplikowany niż

Jeśli znasz sposoby na hackowanie Javascriptu nieco trudniej, napisz je.

+2

Obfuskacja jest częściowo przeszkodą. – Artelius

+2

Trudne? Tak. Trudne wystarczająco? Nigdy dla prawdziwego bezpieczeństwa (ale może to wystarczyć, aby zatrzymać łatwe oszukiwanie w grach lub cokolwiek innego). –

+1

Przypuszczam, że pytanie brzmi "dlaczego to ma znaczenie?" Jeśli istnieje stan wysłany na serwer, poleganie na strażnikach na końcu JS jest złą praktyką, jeśli żadne dane nie są wysyłane, to kto przegrywa? – spender

Odpowiedz

14

Możesz napisać swój JS, aby używać tylko prywatnych metod i zmiennych w funkcji samowykonania. Na przykład poniższy kod nie pozostawia żadnych śladów w globalnej przestrzeni nazw, z którymi mógłby się łączyć małpa.

(function(){ 
    var x = 1; 
    var y = 2; 
    var z = "A am z"; 
    var clickHandler = function() { 
     alert('You clicked the body'); 
    }; 
    document.getElementsByTagName('body')[0].addEventListener('click',clickHandler,true); 
}()); 

[Edycja] ten kod jest podatny do użytkownika zastępującego dostępne na całym świecie obiektów, metody zdarzenia lub właściwości, które są używane (w tym przypadku, document, getElementsByTagName i addEventListener), a więc w przypadku jesteś naprawdę paranoikiem, możesz skopiować je do zakresu funkcji przed załadowaniem strony, a użytkownik ma szansę ich zastąpić. Używanie addEventListener jest dobrym pomysłem, ponieważ w przeciwieństwie do zdarzenia body.onclick, nie można go usunąć ani nadpisać spoza tej funkcji.

+0

To jest przydatne, dziękuję. – stagas

+2

Masz błąd w ostatnim wierszu powinien on być '})();' Myślę, że – stagas

+0

Pisałem to tak długo, aż Crockford wpadł mi do głowy. Z wyjątkiem brakującego średnika (który dodam) powyższy kod sprawdza się zgodnie z JSLint; – Andrew

24

Zaakceptuj, że Twój skrypt javascript zostanie "zmanipulowany" i udostępniony po stronie serwera. Zasadniczo nic nie możesz zrobić, aby powstrzymać ludzi od majsterkowania z klientem.

+0

Dzięki, myślałem o sposobie na utrudnienie, nie jest to naprawdę ważne, aby zapobiec manipulacji, ale chciałbym zapobiec sytuacji, w której ktoś zamieściłby bookmarklet, by "robić to fajne rzeczy", aby wszyscy mogli się włamać. Naprawdę nie obchodzi mnie, czy ekspert w końcu znajdzie sposób, ale chciałbym, żeby było to wystarczająco trudne dla noobów i być może trudno byłoby odtworzyć akcję bez użycia narzędzi, jeśli jest to możliwe. – stagas

+3

Zgadzam się z @spender. Problem z twoim scenariuszem polega na tym, że najlepsze, co możesz zrobić, to ochrona poprzez zaciemnienie. Będzie cię to kosztować dużo czasu i wysiłku, a nigdy nie rozwiąże to problemu, więc zawsze będziesz musiał to zrobić również po stronie serwera. – flpmor

+0

Nie mogę się zgodzić. Bezpieczeństwo przez zaciemnienie to zły pomysł. Musisz wykonać weryfikację po stronie serwera. Kropka. –

-1

Obfuskacja i zminimalizowanie sprawiają, że trudniej jest zhakować, ale zgadzam się ze spenderami.

0

Każdy użytkownik, który naprawdę będzie chciał manipulować klientem, będzie mógł to zrobić. Kod znajduje się na jego komputerze. Nawet jeśli zaciemnisz kod po stronie klienta, istnieją narzędzia, które pomogą komuś oddzielić kod w ciągu sekundy.

Należy jednak pamiętać o tym, że witryna jest bezpieczna na serwerze, a także bezpieczna dla innych użytkowników. To oznacza (jako minimum):

  1. Sprawdzanie/Members każde żądanie i parametrów wejściowych na serwerze, dzięki czemu użytkownicy nie będą mogli zmieniać żadnych danych po stronie serwera przez wyzwalanie „hacked” funkcji po stronie klienta Napisałeś .

  2. Sprawdź wszystkie dane, które wyświetlisz na ekranie, który powstał na podstawie danych wprowadzonych przez użytkownika. Inni użytkownicy mogą wstawiać skrypty po stronie klienta, które są niebezpieczne dla Twojej witryny, a szczególnie niebezpieczne dla innych użytkowników Twojej witryny. (Jeśli używasz .net, a następnie sprawdź bibliotekę AntiXSS)

Powiązane problemy