Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: token - tablica routingu
Forum PHP.pl > Forum > PHP
Omenomn
Cześć, chcę zapytać, co myślicie o zabezpieczeniu akcji w cmsie w taki sposób:

Cytat
Session riding

(inne nazwy to: cross-site request forgery ? CSRF, one click attack, session hijacking)

Celem ataku session riding jest wykonanie złośliwego kodu z uprawnieniami zalogowanego użytkownika. Może to doprowadzić do kradzieży danych użytkownika, zamówienie przez niego jakiegoś produktu (w przypadku sklepu), lub w przypadku wykonania kodu przez administratora ?dostęp? do panelu administratora.

Zabezpieczenie przed CSRF może wydawać się trudne lecz istnieje kilka sposobów by tego dokonać. Dwa najciekawsze opierają się na tokenach, czyli losowo wygenerowanych ciągach znaków.

Zasada działania pierwszego sposobu opiera się na umieszczeniu dodatkowe pola w każdym znaczącym formularzu. W polu tym będzie znajdował się wygenerowany token, który po wysłaniu formularza będzie sprawdzany z tokenem zapisanym np. w sesji.

Drugi sposób jest ?bardziej skomplikowany?, a wraz z tym lepszy. Polega on na stworzeniu ?tablicy routingu?. Mianowicie chodzi o tabelkę w bazie danych która będzie zawierała w sobie zestawienie tokenów oraz prawdziwych adresów. Token powinien być generowany inny dla każdego użytkownika. Dzięki temu napastnik nie będzie w stanie wywołać akcji z uprawnieniami zalogowanego użytkownika.


http://www.sklep.pl/?producent=jakis&p...y&akcja=kup


http://www.sklep.pl/?token=djJa76ashHSB

Opis: Zmiana wyglądów adresów po użyciu ?tablicy routingu?


źródło: www.beldzio.com/bezpieczenstwo-mechanizmu-sesji

Czy można jakoś inaczej rozwiązać sprawę tokenów, nie chcę korzystać z captcha.

Głównie chodzi o usuwanie zawartości strony, ale w sumie można by to zastosować chyba wszędzie.
Comandeer
Hm… A gdzie w powyższym tekście napisano o CAPTCHA? wink.gif

Raczej token wygląda tak:
  1. <input type="hidden" name="token" value="<?=$token;?>">

i przy każdym żądaniu jest generowany nowy. Nie ma tu żadnej akcji ze strony użytkownika.
Omenomn
mówię, że nie chcę korzystać, a nie, że napisano.

Ja chcę token wykorzystać w odnośnikach nie w inputach, czyli chodzi o to, że przy każdym odświeżeniu strony zmienia się token i, że z jednego tokena można korzystać tylko raz, w sensie, że jeden link, działa tylko raz?
Comandeer
Zasada jest podobna:
  1. generujesz token i zapisujesz go do sesji
  2. doklejasz go do linków
  3. user klika na link
  4. system sprawdza czy token się zgadza - jeśli nie, to nie wykonuje żądanej akcji, wywalając błąd 403
  5. powrót do punktu 1.
Omenomn
a mogę zapisać token w bazie danych w zamiast sesji? Co jest lepsze?
Comandeer
I pobierałbyś dla każdego żądania? Raczej średnio wydajne moim zdaniem
Omenomn
ta tablica routingu tez mi się wydaje teraz średnim pomysłem, zrobiłem coś takiego, że po przeładowaniu strony przy każdym adresie generowany jest token, który po kliknięciu w link jest sprawdzany i jeśli jest zgodny z tym w sesji wtedy akcja wykonuje się, a token jest generowany na nowo.

Rozwiązałem bez inputów, a w linkach, ponieważ do usunięcia treści sądzę, że prostszym rozwiązaniem jest odnośnik niż formularz. Formularze powinno się używać tam gdzie, rzeczywiście są wymagane, takie moje zdanie.

Przechwycenie tokena raczej na niewiele się zda, bo i tak można go użyć tylko raz.
Dzięki za pomoc.
Comandeer
Jeśli ktoś zmieni linka to token już będzie raczej przeterminowany.

Inna rzecz, że akcje usuwania itd raczej nie powinny lecieć po GET (no bo GET jak sama nazwa wskazuje służy do pobierania)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.