REST API - kilka pytań dotyczących bezpieczeństwa

1

Witam!
Mam kilka pytań dotyczących tego w jaki sposób zaprogramować interakcję użytkownika z API aby było to "bezpieczne".

Co mam / Co zostało zrobione:

  • aplikacja www (nazwijmy ją app.com) typu one-pager, która do komunikacji z serwerem korzysta wyłącznie z zapytań AJAX do API
  • restowe api - api.app.com (TLS)
  • system uwierzytelniania, który zwraca token JWT służący potem do przesyłania w nagłówku HTTP i do autoryzacji zapytań

Z czym mam problem:

  • token muszę gdzieś przechowywać - wybór padł na cookie. Ale rozumiem że to ciastko ma być tworzone przez JS po stronie klienta a nie przez serwer?
  • w jaki sposób ma działać same-origin policy? co z atakami CSRF?
  • i co w przypadku gdybym potem chciał użyć api do aplikacji mobilnej, jak to się ma do SOP?

Bardzo proszę o poradę i pozdrawiam.

0
  • Ciastko niech tworzy serwer. Chcesz "iść do przodu" (REST), jednocześnie wracając do starych, złych nawyków?
  • CSRF -> https://stackoverflow.com/questions/2392100/how-to-prevent-csrf-in-a-restful-application choć akurat moim zdaniem rozwiązanie takie sobie, bo problematyczne przy wielu zakładkach (choć tylko rzuciłem okiem) - niemniej w Google odpowiedzi jest sporo, a temat raczej był przemyśliwany już 1000 razy w Internecie, więc poszukaj
  • odnośnie same-origin policy - jeżeli wszystko chcesz z JS czy appek mobilnych bezpośrednio czytać no to tylko gwiazdka i pozwalanie na zapytania od wszystkich
0

dziękuję za odpowiedź, poczytam o tych stateless rozwiązaniach dla CSRF i na coś się zdecyduję...
jeszcze mam takie pytanko -ok, cookie stworzę przez serwer, no ale musi być ono czytelne dla JS żeby potem móc przesłać token w specjalnym nagłówku HTTP w kolejnych zapytaniach - czyli ciastko nie może mieć flagi httpOnly; czy jest to dobra praktyka? co w tym wypadku z ewentualnym atakiem XSS?

0

w sumie to nie pomyślałem, co się dzieje z ciastkami wysyłanymi z obcej domeny. trzeba to by było sprawdzić, ale podejrzewam, że przeglądarka je po prostu zapisze i przy kolejnych requestach będzie je automatycznie odsyłać - więc nie ma potrzeby, żebyś zaglądał do nich przez JS

1 użytkowników online, w tym zalogowanych: 0, gości: 1