2009-08-18 18 views
7

Potrzebuję wygenerować UUID, aby ostatecznie przechowywać w bazie danych. Czy mogę wygenerować ten identyfikator UUID z Javascript w przeglądarce klienta (There are some examples here)?Czy istnieje niebezpieczeństwo utworzenia UUID po stronie klienta JavaScript?

Czy istnieje ryzyko naruszenia bezpieczeństwa w ten sposób? Rozumiem, że każdy może modyfikować UUID przed przekazaniem go serwerowi do przechowywania. Więc muszę sprawdzić, czy są one całkowicie unikatowe przed przechowywaniem ich w bazie danych, ale poza tym, czy są jakieś inne rzeczy do kasy?

(Przepraszam za mój angielski, nie krępuj się, aby skorygować ewentualne błędy gramatyczne)

edit: Aby odpowiedzieć na pytania, dlaczego miałbym to zrobić, to dlatego, że mogę utworzyć nowy obiekt i to identyfikator w JavaScript i dodaj go do mojego widoku, a następnie wykonaj wywołanie AJAX na serwerze, aby dodać je do bazy danych. W ten sposób nie muszę ładować go z bazy danych, aby wiedzieć, jaki jest jego podstawowy identyfikator.

+0

Myślę, że to może być problem z bezpieczeństwem, pozwalając użytkownikom zobaczyć kod generatora UUID. Teoretycznie możliwe byłoby wówczas wygenerowanie istniejących identyfikatorów UUID, na przykład identyfikatorów sesji innych użytkowników itp. –

Odpowiedz

9

Niezupełnie. Dopóki jest to prosty identyfikator i nic więcej, a faktycznie sprawdzasz go pod względem ważności i unikalności, nie różni się on niczym od kont użytkowników posiadających identyfikator w adresie URL.

Sprawdź swój pasek adresu URL. Założę się, że kluczem do tego pytania jest 1296234, ale tak naprawdę nic nie mogę zrobić z tymi informacjami. Taki sam układ z twoim scenariuszem.

+0

Dzięki. Nie sądziłem, że coś złego może się stać, ale chciałem mieć pewność, że nie przeoczyłem jakiegoś dobrze znanego ataku. –

3

Jakie korzyści można uzyskać przy generowaniu tych klientów? Szczerze mówiąc, najlepszą opcją jest wygenerowanie go po stronie serwera, poza zasięgiem użytkowników. To może nie ochronić Cię przed poważnymi problemami z bezpieczeństwem, ale ograniczy to nadmiarową walidację.

+0

Wiem, że ten wątek jest stary, ale generowanie identyfikatora na kliencie jest potrzebne, jeśli używasz w pełni idempotentowych wywołań REST. Inną alternatywą byłoby zapytanie serwera o nowy identyfikator, a następnie użycie tego identyfikatora w wywołaniu REST. Oznacza to jednak dwa połączenia z serwerem. – Alkaline

+1

@Sampson Nigdy nie myślałem, że będę musiał wygenerować UUID po stronie klienta, ale teraz jestem zainteresowany aplikacją internetową w trybie offline i generowanie UUID po stronie klienta jest idealne dla tego przypadku użycia! – Maxime

+0

Jeśli przestrzegasz ścisłych CQS i potrzebujesz identyfikatora od razu (np. Do przekierowania do odpowiedniego widoku), jest to dobry sposób na zrobienie tego. – Shocked

3

Czy jest jakiś powód, dla którego baza danych nie może generować (zwiększać) identyfikatora?

Jeśli, jak powiesz, będziesz musiał sprawdzić wyjątkowość wartości przed jej przesłaniem, dlaczego, po prostu nie masz tego języka, którego używasz do generowania. To sprawiłoby, że byłby on bardziej nieprzejrzysty.

+2

Notatka boczna tutaj dla przyszłych widzów: przestań polegać na autogenerowanym ID. Odłącz się od bazy danych i użyj identyfikatorów UUID zamiast –

2

Tak. Ryzyko nie jest specyficzne dla UUID, każdy wygenerowany po stronie klienta identyfikator wiąże się z pewnym ryzykiem, w zależności od tego, co robisz z tym identyfikatorem. Problem polega na tym, że bardzo trudno jest uwierzytelnić JavaScript. Jeśli akceptujesz identyfikator wygenerowany przez klienta, akceptujesz wszelkie identyfikatory od hakerów.

ryzyko może zawierać

  1. sesji kradzież. Jeśli użyjesz identyfikatora do zidentyfikowania sesji, ktoś może użyć istniejącego identyfikatora jako wygenerowanego identyfikatora, a serwer może traktować go jako istniejącą sesję, jeśli nie podejmie właściwej opieki.

  2. Zduplikowane klucze. Prawdziwy UUID jest losowy, ale ktoś może wygenerować zduplikowane klucze, które zepsują twoją bazę danych.

Możesz znaleźć sposoby obrony przed każdym z tych ataków, ale to jest pasywna ochrona. Może to pokonać pierwotny cel generowania identyfikatorów na kliencie, co jest proste.

+0

Jeśli identyfikujesz identyfikator sesji, zostaniesz zhakowany na dowolnej stronie internetowej. Punkt 1 nie jest prawidłowym punktem. –

Powiązane problemy