2013-08-09 30 views
8

Czy przechowywanie hasła użytkownika w zmiennej javascript w przeglądarce powoduje ujawnienie jakichkolwiek luk w zabezpieczeniach wykraczających poza zwykłe luki w zabezpieczeniach klienta opartego na przeglądarce?Trzymanie hasła w zmiennej javascript - implikacje bezpieczeństwa?

Rozważ ten fragment jako prosty przykład - jsfiddle here

<label for="password">Password</label> 
<input type="password" id="password"/><br/><br/> 
<button type="button" id="pwdButton">Store password in window.password</button> 

<script> 
    function getContentsOfPasswordField() { 
     return jQuery("input#password").val(); 
    } 

    jQuery("button#pwdButton").on("click", function() { 
     window.password = getContentsOfPasswordField(); 
     alert("'" + password + "' stored in global var window.password") 
    }); 
</script> 

W tym przykładzie zmienna hasło jest globalny i utrzymuje się przez cały okres użytkowania strony, po prostu zrobić to tak otwarty do ataku, jak to możliwe i podać najgorszy możliwy scenariusz. Być może ograniczenie zakresu/czasu życia zmiennej może ochronić ją przed niektórymi klasami ataków?

Atak, który przychodzi od razu na myśl, to XSS, ale wtedy, jeśli klient jest podatny na XSS, atakujący może odczytać hasło poprzez i tak logowanie klucza (patrz this), więc trzymanie go w zmiennej doesn ' t, o ile widzę, zwiększa podatność na ataki XSS.

Uwaga punkt pytaniem nie jest to, czy robi to zła praktyka, jest to bardziej fundamentalne pytanie o stronie klienta Web App bezpieczeństwa :)

+2

Po wpisaniu hasła nie należy "pozostać" na stronie wprowadzania hasła. 1. Możliwość innego oprogramowania na hoście odczytującym hasło klienta (przez odczytanie pamięci przeglądarki), jest to problem po stronie klienta i zawsze może być stosowany. 2. Możliwość dowolnego rozszerzenia przeglądarki odczytującego hasło. 3. Możliwość dowolnego skryptu na tej samej stronie odczytującego hasło. –

+1

Ale czy któryś z tych potencjalnych ataków jest bardziej możliwy, ponieważ hasło jest przechowywane w zmiennej? Jeżeli złośliwe oprogramowanie stron trzecich może uzyskać dostęp do maszyny wirtualnej javascript - czy może to być nie tylko keylog czy odczytać hasło, mimo że jest ono wprowadzane do hasła? – davnicwil

+2

ustawienie go na "okienku" może ominąć wszelkie wbudowane zabezpieczenia (np. Dla źródła), jeśli zostały zaimplementowane przez przeglądarkę klienta. Jeśli zostawisz otwarte okno swojego domu, możesz zostać okradziony, ale to nie znaczy, że powinieneś również zostawić otwarte drzwi. –

Odpowiedz

1

Pozostawiając hasła w zmiennej pozostawia to ludziom dostęp do nich za pomocą narzędzi przeglądarki! pozwala powiedzieć funkcję wywołaną po naciśnięciu przycisku hasła sklepu, przechowuje hasło w zmiennej o nazwie hasło. Nawet jeśli ta zmienna nie jest później używana w ogóle na stronie, po prostu gdzieś w kodzie jest ona obsługiwana później, wystarczy otworzyć narzędzie dla programistów w przeglądarce, dodać oświadczenie takie jak alert(password); i Bam, hasło dosłownie wyskakuje przed nimi.

Wprawdzie każdy kod na tyle prosty, aby pozwolić komuś zrobić, że jest niegodny bycia w sieci, a jeszcze mniej warty jest wtrącania się, ale myślę, że to lekcja, jak naprawdę jesteśmy naprawdę podatni.

+0

prawda, ale to naprawdę jest pytanie o zdalne ataki w sieci. Zakładałem, że użytkownik + maszyna są fizycznie zabezpieczeni podczas sesji! – davnicwil

+1

Poza tym myślenie o tym zapewnia niewielką dodatkową szansę atakującemu niż, powiedzmy, przeglądarkę przechowującą hasła lub ciasteczka sesyjne - więc nic naprawdę niezwykłego. Użytkownik fizycznie chroniący przeglądarkę jest poza kontrolą twórcy aplikacji internetowej. – davnicwil