2010-06-22 16 views
5

Właśnie piszę projekt i napisałem go z prośbami jquery i ajax.Bezpieczeństwo żądań AJAX

Jedyna rzecz, nie wiem, czy jest wystarczająco bezpieczna?

na przykład, kiedy zweryfikować nazwę użytkownika, podczas rejestracji nowego użytkownika, używam żądania ajax jquery,

ja dostać tablicę istniejących nazw użytkowników z db (z JSON), a następnie sprawdzić, czy new_username nie inArray() istniejących username s, mogę wykonać inne żądanie i zarejestrować użytkownika.

ale co z bezpieczeństwem? haker meybe może znaleźć sposób na zmianę niektórych moich if-else stwierdzeń, a cały mój securite się zepsuje.

Może pomożesz mi zrozumieć tę sytuację?

Dzięki

+1

wielkie dzięki za ciekawą dyskusję. a może znasz metody zmiany skryptu po stronie klienta? czy są na to narzędzia? – Simon

Odpowiedz

6

Czemu realizacji dowolny tej stronie klienta?

Powinieneś wysłać nazwę użytkownika/hasło przez HTTPS w zapytaniu AJAX i pozwolić serwerowi odpowiedzieć tylko danymi wymaganymi dla użytkownika, aby przejść dalej, nie całą listę nazw użytkowników.

Nawet odkładając na bok zabezpieczenia, a co jeśli masz miliony użytkowników? Zamierzasz wysłać tę listę do wszystkich klientów, aby się zalogować?

+0

Nawet przy użyciu protokołu HTTPS nie wysyłałbym całej tej listy do użytkownika; jeśli odwiedzający mogą zobaczyć tę listę (przy użyciu dowolnego narzędzia), mogą zobaczyć, kto zarejestrował się w Twojej witrynie. Co więcej, nie polegaj wyłącznie na walidacji po stronie klienta; łatwo ominąć JavaScript. –

+0

to tylko przykład, ja tylko staram się zrozumieć działanie jquery z punktu widzenia bezpieczeństwa (przepraszam za błędy w języku angielskim :) – Simon

+2

Pamiętaj, że wszystko, co robisz na kliencie, może być modyfikowane i przeglądane przez użytkownika. Za każdym razem, gdy musisz wykonać bezpieczną operację, musisz zweryfikować serwer. –

12

(dalej zakładam, że username jest identyfikator, z którymi użytkownik może się zalogować, nie jakiś pseudonim;)

  1. ) uzyskanie wszystkich nazw użytkownika jako JSON jest zły . Następnie atakujący otrzymuje wszystkie zarejestrowane nazwy użytkownika natychmiast!
    Po prostu wyślij nazwę użytkownika na serwer, zatwierdź ją i wyślij jako odpowiedź "prawidłowy" lub "nieprawidłowy". Tj. Sprawdź dostępność na stronie serwera .

  2. Zawsze walidacji danych wprowadzanych przez użytkownika po stronie serwera . JavaScript można wyłączyć.

Aktualizacja:

To nie ma znaczenia, czy jQuery jest zaangażowany czy nie. Wszystko, co wysłać do klienta (i nie jest hashed lub szyfrowane) mogą być odczytywane przez klienta, to nie ma znaczenia, czy jest to XMLHttpRequest czy „normalny” żądanie.

Czy chcesz wysłać tabelę HTML ze wszystkimi nazwami użytkowników do każdego użytkownika witryny?Mam nadzieję :)


Podsumowanie:

  • wysyłać tylko dane, które klient może mieć dostęp.
  • Sprawdź poprawność danych wprowadzonych przez użytkownika po stronie serwera.
  • Nigdy nie ufaj wprowadzaniu danych przez użytkownika.
+2

+1 dla tabeli HTML! : D –

+0

nie, wysyłam go jako listę, nie tabelę: D – Simon

+0

BTW, znam wiele stron, które wysyłają wszystkie nazwy użytkowników do odwiedzającego; Na wielu forach nazywa się to "listą członków". [Nawet SO ma] (http://stackoverflow.com/users) ;-) –

2

Bezpieczeństwo to jedna z tych rzeczy, które najlepiej wykonać po stronie serwera, jeśli to możliwe. Moje typowe podejście do logowania AJAX polega na wysłaniu nazwy użytkownika i hasła zaszyfrowanego MD5 lub SHA1 do metody na serwerze, która zajmie się wszystkimi danymi logowania. Szczegóły tej implementacji będą naprawdę zależeć od twojej technologii po stronie serwera, ale większość frameworków aplikacji internetowych ma odpowiednie narzędzia do tego. Mogą istnieć nawet pewne rozwiązania, które obejmują biblioteki JavaScript, aby obsłużyć również pracę po stronie klienta.

5

Ajax nie zastępuje kodu po stronie serwera. Chociaż możliwe jest zaimplementowanie funkcji logowania i rejestracji przy użyciu ajax, nadal trzeba będzie zweryfikować i przechowywać dane na serwerze.

Bardziej rozsądna implementacja po prostu wyśle ​​żądanie https na serwer zawierający nazwę użytkownika i hasło, na które serwer odpowiedziałby za pomocą yay lub nie.

+0

Ajax nie zastępuje kodu po stronie serwera <<< TO !!! – Incognito

Powiązane problemy