Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak najlepiej zabezpieczyć stronę przed atakami XSS i CSRF?
Forum PHP.pl > Forum > Przedszkole
Gość
Czy taki kod:

  1. if (!empty($_POST)) array_walk_recursive($_POST, 'CleanTags');
  2. if (!empty($_GET)) array_walk_recursive($_GET, 'RemoveXSS');
  3. if (!empty($_COOKIE)) array_walk_recursive($_COOKIE, 'CleanTags');
  4. if (!empty($_SERVER)) array_walk_recursive($_SERVER, 'CleanTags');
  5. if (!empty($_SESSION)) array_walk_recursive($_SESSION, 'CleanTags');
  6. if (!empty($_REQUEST)) array_walk_recursive($_REQUEST, 'CleanTags');
  7.  
  8. function CleanTags(&$val, $index) {
  9. $val = strip_tags($val);
  10. }


jest dobrym zabezpieczeniem przede XSS i CSRF? Czy można to zrobić jakoś lepiej?
Gość
W drugiej linijce chciałem oczywiście napisać:
if (!empty($_GET)) array_walk_recursive($_GET, 'CleanTags');
wNogachSpisz
http://forum.php.pl/index.php?showtopic=189410
Gość
A czy ten sposób, który podałem nie jest dobry?
wNogachSpisz
Cytat(Gość @ 1.08.2012, 12:50:44 ) *
A czy ten sposób, który podałem nie jest dobry?

Nijak nie zabezpiecza przed CSRF.
Gość
Ale przecież ten kod usuwa wszystkie znaczniki jakie użytkownik może gdziekolwiek podać (pole formularza, doklejenie do adresu, itd.), a żeby CSRF się udał atakujący musi mieć chyba możliwość wstawiania znaczników?
wNogachSpisz
Eee. Mylisz pojęcia.

http://pl.wikipedia.org/wiki/Cross-site_request_forgery
Gość
Tak, z tego co teraz doczytałem najważniejsze w ochronie przed CSRF jest, żeby sprawdzać poprawność tokena, ale ochrona przed XSS jest chyba częścią ochrony przed CSRF (przynajmniej wg. tego co jest napisane tutaj - "Make sure your site is not vulnerable to XSS")?
wNogachSpisz
Strona nie musi być podana na XSS żeby możliwe było przeprowadzenie ataku CSRF.
Nawet na forum php.pl można przeprowadzić niegroźny atak CSRF. Mogę np. spowodować, że Twoj login pojawi się na liście odwiedzjących mój profil. Wystarczy obrazek w treści posta który przekieruje na odpowiedni URL.
Gość
Pozostaje kwestia w jaki sposób przechowywać token? W przypadku formularzy można go schować w polu hidden. A jak będzie w przypadku odnośników? Gdzie go można przechowywać? Na pewno w samym adresie URL, ale czy oprócz tego (nie chciałbym przechowywać tokena w adresie URL bo to by trochę spaskudziło przyjazne adresy) jest jeszcze jakiś inny sposób? Może jakoś w zmiennej sesji?
CuteOne
Odpowiedź jest dość prosta - wszelkie akcje typu "zmień coś" (np. akcja "Usuń moje konto") wstaw do formularza z tokenem. Pozostałe akcje nie będą interesowały potencjalnego hakiera
Gość
No ale jeżeli np. po zalogowaniu w panelu użytkownika jest link "Usuń moje konto", to taka akcja raczej na pewno będzie bardzo interesowała hakera.
!*!
Cytat(Gość @ 5.08.2012, 10:34:58 ) *
No ale jeżeli np. po zalogowaniu w panelu użytkownika jest link "Usuń moje konto", to taka akcja raczej na pewno będzie bardzo interesowała hakera.


Nawet bardzo. Jednak nie widziałem jeszcze serwisu, który umożliwiałby usunięcie konta zwyczajnie po kliknięciu w link.
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.