2011-01-20 13 views
8

W czasie, w którym spędziłem przerwy, ucząc się, jak PHP obsługuje Unicode, starałem się, aby moje ciasteczka "Remember Me" były trochę bezpieczniejsze. Jest jednak kilka rzeczy, których nie rozumiem, a kilka własnych rozważań chciałbym przedstawić kilka sugestii i opinii.PHP: Zapamiętaj mnie i bezpieczeństwo?

1) Czy istnieje metoda przyjęcia funkcji "Zapamiętaj mnie", która nie obejmuje plików cookie? Ciekawy, ponieważ istnieją oczywiste luki bezpieczeństwa w przechowywaniu plików cookie uwierzytelniania. Nie chodzi o to, że w prawie wszystkim nie ma zagrożeń bezpieczeństwa.

2) Ponieważ nie współpracuję z bankiem lub "bardzo wrażliwymi" informacjami, czy konieczne jest wymaganie od użytkowników wprowadzania haseł w przypadku bardziej "wysokiego profilu"? Wygląda na to, że zapamiętanie loginu byłoby marnowaniem, jeśli po dwóch minutach poprosimy ich o zalogowanie się.

3) Jaka jest absolutnie najlepsza metoda przechowywania pliku cookie służącego do uwierzytelniania (z wyjątkiem "w ogóle nie")? Obecnie zakodowałem ten obszar, aby ustawić pojedynczy token w pliku cookie (zaszyfrowany za pomocą time(), ich agent użytkownika, remote_addr i salt - sha256). Kiedy ten użytkownik wróci, sprawdza tabelę "sesji" dla tokena, a następnie dopasowuje IP do IP, aby je zarejestrować. Jeśli token istnieje, ale adres IP się nie zgadza, cicho rozbraja plik cookie i prosi o zalogowanie się jako jeśli nie mieli.

Jeszcze raz dziękuję wszystkim.

+0

Należy ponownie wykorzystać istniejące ramy uwierzytelniania ilekroć jest to możliwe, ponieważ, naprawdę, jest skomplikowany. Na przykład, spójrz na https://github.com/delight-im/PHP-Auth Będziesz potrzebował jakiegoś stałego magazynu po stronie klienta do tego, co próbujesz zrobić - i dlatego pliki cookie są idealnym wyborem. – caw

Odpowiedz

6
  1. Zasadniczo nie. Wymaga pewnego rodzaju pamięci po stronie klienta; nie masz możliwości dowiedzenia się, kim jest klient bez ciasteczka (lub podobnego, jak magazyn HTML po stronie klienta).

  2. To kompromis, który musisz podjąć. Minimalne, stare hasło lub inna forma potwierdzenia (e-mail?) Powinna być wymagana, aby zmienić go na nowy.

  3. Nie można całkowicie zabezpieczyć się przed kradzieżą plików cookie i późniejszym podszywaniem się, chyba że zaszyfrujesz całą komunikację. To jedyna bezpieczna metoda. Oczywiście powiązanie adresu IP, klienta użytkownika itp. Z plikiem cookie może być pomocne, ale korzystanie z szyfrowania jest łatwiejsze i bezpieczniejsze. (I źle punkt tutaj - co ważne wartości cookie jest to, że losowo, więc powinieneś zmienić pokoleń sposobu bycia mniej przewidywalne)

+0

1) Nie sądzę, ale pomyślałem, że warto byłoby mimo wszystko zapytać o możliwe radykalne pomysły. ;) 2) Zdecydowanie wymagałbym starego hasła do aktualizacji wszelkich informacji, takich jak adres e-mail, nazwa użytkownika, hasło itp. Dotyczyłem głównie rzeczy takich jak kupowanie czegokolwiek (jest to gra, więc użytkownicy będą mieli takie opcje), handlując z inni użytkownicy, tego rodzaju rzeczy. 3) Właściwie odnoszę się do systemu przechowywania/sprawdzania (sposobu, w jaki działa według mojego wstępnego opisu) w przeciwieństwie do szyfrowania lub braku szyfrowania. – Zydeco

+0

@Zyd Ah Myślałem, że mówisz, że zaakceptowałeś tylko pewien plik cookie, jeśli IP, agent użytkownika itp. Się zgadzają. Jedynym wymaganiem pliku cookie jest to, że jest on losowy, więc nie można go odgadnąć. Metoda, z której korzystasz, nie jest zbyt dobra, ponieważ jest trochę przewidywalna - chociaż sól, jeśli jest wystarczająco duża, może to zrekompensować. W każdym razie powinieneś to zmienić. – Artefacto

+0

Aby być bardziej zrozumiałym: Użyj HTTPS i ustaw "bezpieczną" flagę na ciasteczkach, która pozwala uniknąć większości form przechwytywania plików cookie (chyba że komputer użytkownika zostanie przejęty). – deceze

Powiązane problemy