Wpisy oznaczone tagiem porady
Cross-site scripting – bezpieczeństwo formularzy
Napisany przez coder w PHP, Programming dnia Grudzień 18, 2008
Cross-site scripting (XSS lub inaczej CSS), to jak wiadomo taki rodzaj ataku na serwisy WWW, najczęściej przez źle walidowane formularze i najczęściej przez wstrzykiwany przez nie kod JavaScript.
Pokażę dziś jak można łatwo zabezpieczyć swoje formularze. Wystarczy kilka prostych wierszy kodu i po problemie. Najważniejsze jest aby całą tablicę $_POST umieć łatwo wyczyścić. Pokaże jak to zrobić rekurencyjnie.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Common() { public static function TidyString($str) { $str = stripslashes($str); $str = htmlspecialchars($str); return $str; } public static function TidyArray(&$array) { foreach((array)$array as $key => $value) { if( !is_array($value) ) { $array[$key] = Common::TidyString($value); } else { $array[$key] = Common::TidyArray($value); } } return $array; } } |
W naszej klasie Common, widzimy dwie proste metody, TidyArray() oraz TidyString(). TidyArray() działa rekurencyjnie, obiega elementy tablicy i jeśli wartość nie jest tablicą to ją czyści poprzez TidyString(), jeśli element jest tablicą to wywołujemy naszą metodę rekurencyjnie na danym fragmencie tablicy. Wartości tablicy przekazujemy metodzie przez referencje.
Mając taka klasę możemy umieścić takie wywołanie gdzieś np. w pliku konfiguracyjnym naszej aplikacji.
1 | $_POST = Common::TidyArray($_POST); |
Należy pamiętać, że nasza metoda TidyString() posiada podstawowe funkcje „czyszczące”, można sobie ją dowolnie rozszerzyć np. dodać funkcję strip_tags(). Dodam jeszcze, że należy być ostrożnym przy filtrowaniu danych po serializacji.