- Sprawdzanie nagłówka Referer - niektórzy w trosce o prywatność go wyłączają
- Wysyłanie akcji metodą POST - wtedy nie zadziała metoda "na obrazek"
Skuteczniejsze metody:
- Jednorazowy klucz w ukrytym polu formularza - musi się zgadzać z zapisanym na serwerze
- Potwierdzanie hasła - np. przy wejściu do panelu admina, ważnych zmianach
- Kody jednorazowe, SMS, telefon - to już krytyczny poziom zabezpieczeń
Jakie jeszcze znacie skuteczne sposoby zabezpieczeń?
Chcę zastosować takie zabezpieczenia, aby w jak najmniejszym stopniu utrudnić korzystanie z serwisu. Rozważmy jednorazowy klucz. Standardowa implementacja wygląda tak:
if( wyslano_formularz ) { { } }
Osoba pisze jednocześnie 2 posty. Kiedy wyśle drugi, zobaczy komunikat "Wyślij formularz ponownie". Przyczyna: w sesji zapisujemy klucz pod identyczną nazwą. Innym razem pisze długi post. Znowu do samo. Przyczyna: Sesja wygasa po 20 minutach (można zwiększyć, tylko niezalecane).
Rozważmy ponowne logowanie przy wejściu do panelu admina. Redaktor pisze długi artykuł. Zapisuje. Niestety, sesja wygasła. Musi zalogować się ponownie. Artykuł znika. Zamiast sesji można wykorzystać ciasteczka. Dopóki nie zamknie przeglądarki, nie zostanie wylogowany. Jak nie popełnić błędu? Wystarczy zapisać md5(hasło + coś tam)?
Jak projektować zabezpieczenia, aby nie utrudniać życia użytkownikom?