Jak bezpieczne jest przechowywanie lokalne?

33

Pytanie mówi wszystko naprawdę. Chcę świadczyć usługę, ale nie chcę samodzielnie przechowywać żadnych danych w bazie danych. Biorąc pod uwagę wszystkie najnowsze wiadomości o hakowaniu itp., Wydaje mi się, że milej jest, gdy klienci mają pełną kontrolę nad swoimi danymi.

Problem polega na tym, że przechowywane dane są potencjalnie wrażliwe. Miałem zamiar… kiedy klient odwiedza stronę internetową, pojawi się pytanie „czy jesteś na komputerze osobistym czy publicznym”. Jeśli są na komputerze publicznym, strona odmówi dostępu.

Gdyby byli na komputerze osobistym, poprosiłoby ich o ustawienie hasła. Wszystkie ich dane byłyby następnie szyfrowane przy użyciu tego hasła. Teraz oczywiście nie jest to zbyt bezpieczne. Metoda szyfrowania byłaby w JavaScript, a ich hasło w postaci zwykłego tekstu, więc zakładam, że bystry użytkownik mógł zlokalizować hasło w localStorage i uzyskać dostęp do danych.

Wydaje mi się jednak, że nie stanowi to większego problemu. Jeśli używasz komputera osobistego, szanse na to są zdalne, ponieważ ... ktoś inny potrzebuje dostępu do swojego konta użytkownika na komputerze, ktoś inny musi wiedzieć o stronie ... ktoś inny musi zrozumieć localStorage i jak uzyskać do niego dostęp. Wrażliwe dane nie są takie, które zagrażają ich tożsamości lub wielu innym. Zapisuje po prostu coś, czego większość ludzi nie chciałaby opublikować publicznie.

Tak naprawdę pytanie brzmi: czy localStorage jest wystarczająco bezpieczny?

Dodatkowe pytanie ... jak trudno jest wyczyścić pamięć lokalną? Nie chciałbym, aby użytkownicy przypadkowo wyczyścili swoje dane.

Wreszcie - czy warto szyfrować / deszyfrować ich dane tak, jakbyś miał hasło, aby uzyskać dostęp do strony ...

JasonS
źródło
2
JavaScript po stronie klienta nie jest najlepszym miejscem do wykonywania kryptografii. Każdy nieuprzejmy użytkownik może spojrzeć na kod i włamać się do twojego algorytmu szyfrowania i sprawić, że tak naprawdę nic nie robi i akceptuje tylko zaszyfrowane hasło.

Odpowiedzi:

10

Co powiesz na to, by w ogóle nie przechowywać hasła, nawet w lokalnej pamięci? Możesz użyć funkcji wyprowadzania klucza, aby uzyskać klucz z hasła. Przy soli i rozsądnej liczbie iteracji powinno to być dość bezpieczne.

CodesInChaos
źródło
Byłoby bezpieczniej, gdyby hasło zostało przesłane do PHP, który następnie wygenerował klucz za kulisami?
JasonS
Nie. Hasło jest najpierw podawane klientowi. Wysyłając go na serwer, zwiększasz ryzyko kradzieży. Wykonywanie wyprowadzania klucza w JS zachowuje tajemnicę na kliencie. W każdym przypadku wkrótce powinieneś zapomnieć o PW. Ale myślę, że to wciąż nie ma sensu - zobacz moją odpowiedź.
Wielu hakerów jest dość inteligentnych ... Użyj Lib bCrypt.
Eddie B,
2

Używanie JavaScript z pamięcią lokalną jest maksymalnie tak bezpieczne, jak (twój serwer plus połączenie między przeglądarką a serwerem).

Jeśli komuś uda się zmodyfikować serwer i obsługiwać różne pliki JS lub zmodyfikować (podczas przesyłania) pliki JS wysłane z serwera do klienta, mogą zrobić wszystko z danymi, które chcą.

Dodatkowo: Ponieważ dane znajdują się na kliencie, nie można nic zrobić, aby je chronić. Na zwykłym serwerze możesz np. Ograniczyć częstotliwość dostępu (przykład dla bezpiecznego hasła zdalnego: tylko 1 hasło odczytane w ciągu 10 minut). Wszystko to jest bezużyteczne, jeśli dane znajdują się na kliencie, a atakujący może manipulować całym kodem pracującym z danymi.

W końcu nawet z localstorage musisz zabezpieczyć swoją aplikację internetową! Po co więc robić rzeczy na (miejmy nadzieję) bezpiecznym serwerze? Jeśli nie, to dlaczego nie użyć lokalnego programu zainstalowanego na kliencie?

Daniel Böhmer
źródło
Czy nie uważasz, że głównym problemem związanym z bezpieczeństwem jest to, czy urządzenie zostanie użyte lub skradzione przez kogoś innego?
2

Co powiesz na uzyskanie klucza z serwera używanego do odszyfrowywania danych localStorage?

Może działać w następujący sposób:

  • Po ustanowieniu sesji serwer zwraca klucz.
  • Ten klucz służy do szyfrowania / deszyfrowania danych w localStorage.
  • Gdy użytkownik opuszcza stronę, klucz zostaje utracony, uniemożliwiając innym odczytanie zawartości localStorage.

Powinno to umożliwiać dostęp tylko wtedy, gdy użytkownik ma ustanowioną sesję.

Justin Meyer
źródło
3
Nie działałoby to jednak w celu uzyskania dostępu do danych offline (co wydaje się podstawowym przypadkiem użycia dla localStorage). Aby skorzystać z tej metody offline, musisz zachować klucz.
Timothy Lee Russell
0

ogólnie nie jest trudno wyczyścić lokalną pamięć, ale zależy to od przeglądarki. Musisz jednak skorzystać z narzędzi programistycznych przeglądarek (firebug, webkit itp.).

pomyśl o tym jak o ciasteczkach. Nigdy nie należy przechowywać wrażliwych danych w pamięci lokalnej. hasła, numery kart kredytowych, cokolwiek.

zawsze możesz zaimplementować jakąś funkcję, aby wyczyścić pamięć lokalną po x braku aktywności, ale to nie rozwiąże problemu bezpieczeństwa. To tak, jakby wygasła sesja automatyczna. Ten sam problem dotyczy tego, że jeśli ktoś opuści komputer, a potem ktoś usiądzie przed końcem sesji, może zrobić różne rzeczy.

hvgotcodes
źródło
0

Dwie kwestie:

  1. jeśli przechowujesz hasła w postaci zwykłego tekstu, a następnie polegasz na fakcie, że prawdopodobnie ich nie znajdziesz, to tylko bezpieczeństwo dzięki niejasnościom. Po prostu przechowuj dane w postaci czystego tekstu i opieraj się na tym samym założeniu (wciąż nie jest bezpieczne, ale nie ma fałszywego poczucia bezpieczeństwa)

  2. w większości przeglądarek, jeśli ludzie wyczyszczą pamięć podręczną, usuwają również zawartość localStorage. Ludzie nie oczekują utraty ważnych danych, gdy wyczyszczą swoją historię i pamięć podręczną.

Myślę, że przesadzasz, do czego służy localStorage. Jeśli chcesz korzystać z lokalnej bazy danych, który gra dobrze z webapps można spojrzeć na couchdb „s couchapps .

Ale nie przechowuj hasła.

Giacomo
źródło
0

Możesz użyć javascrypt . Poproś użytkownika o hasło, które stanie się kluczem szyfrowania / deszyfrowania

Nie musisz przechowywać hasła, ale żądaj go za każdym razem, gdy użytkownik otworzy stronę.
Może być przechowywany, jeśli użytkownik chce, a teraz implikacje.

Ale dołączając do komentarza stivlo, co z:

  1. dostęp do wielu urządzeń
  2. utworzyć kopię zapasową
  3. Zapomniałeś hasła
  4. zbyt łatwe czyszczenie pamięci podręcznej

Myślę, że powinieneś ponownie rozważyć początek rozumowania. Unikaj chmury tylko z powodu niektórych ostatnich i sensacyjnych wydarzeń, to szybki wniosek.

Mikrofon
źródło