Ogólnie problem wygląda następująco - tworzę pewną aplikację, która będzie (a przynajmniej taki jest plan :D) działać na serwerze. Jej użytkownicy będą komunikować się z nią za pomocą strony internetowej i programu-klienta. Jestem teraz na poziomie etapie projektowania bazy danych (o bazach mam pojęcie minimalne, o serwerach już nie wspominając). Doszedłem teraz do problemu uwierzytelniania, sesji i ogólnego bezpieczeństwa. Przeczytałem trochę o ogólnych sposobach uwierzytelniania hasłem, hashowaniu, soleniu, ciasteczkach i atakach. Mam teraz następujące pytania:
- Jak ostatecznie powinna wyglądać tabela użytkowników? Czy powinno to być coś w rodzaju (login, email, hash, sól, inne dane)?
- Gdzie powinna znajdować się funkcja hashująca i soląca? Po stronie klienta, czy serwera?
- Jak powinna wyglądać bezpieczna komunikacja użytkownika i serwera?
- Czy porównywanie hashy to zwykłe if(hash1 == hash2)?
- Jaki algorytm hashujący?
- Jak powinien wyglądać bezpieczny system sesji? Trzymać informacje w ciasteczkach, czy może jeszcze po stronie serwera, a może połączenie obu?
Znacie może jakieś niecodziennie spotykane zabezpieczenia przeciwko idiotyzmowi użytkowników, jeżeli chodzi o uwierzytelnianie?
Dostęp do bazy będzie miał tylko jeden program. Za komunikację z użytkownikami i uwierzytelnianie będzie odpowiadał jeden z jego modłów. Wszystko po stronie serwera będzie pisane w C++, włącznie z CGI, baza danych to PostgreSQL.
Jeżeli znacie jakieś dobre źródła związane z tematem, posługiwania się serwerami, zabezpieczaniem ich przed atakami, używania C++ jako CGI albo cokolwiek przydatnego, to podajcie linki:
Tutaj kilka linków ode mnie: