![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 0 Dołączył: 15.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich forumowiczów bardzo gorąco, ponieważ jest to mój pierwszy post na tym forum.
Następnym razem będę witał trochę mniej entuzjastycznie ![]() Co prawda, podobne pytanie zadałem na innym forum, ale już przez ponad miesiąc nie otrzymałem żadnej odpowiedzi, więc postanowiłem w zmienionej wersji zadać je wam, drodzy PHP-owcy. Jak większość ludzi zadających tutaj pytania ja również piszę swój serwis i mój problem polega na tym, że obawiam się o jego podatność na ataki. Bardzo dużo czytałem na temat SQL Injection i innych typach ataków, noo... już ze dwa tygodnie. Żeby zebrać jak najwięcej informacji w jednym miejscu i nie tworzyć podobnych tematów, pozwolę sobie zadać pytania w punktach. Wiem, że należy filtrować wszystkie dane pochodzące od użytkownika (to jest priorytet). 1) Jeśli mam formularz oparty o zmienne sesyjne (w tym miejscu muszę zaznaczyć, że walidacja następuje na każdym polu input i textarea), to czy dane pochodzące z każdego pola przed dostaniem się do zmiennej sesyjnej muszą zostać od razu przefiltrowane, czy mogą zostać przefiltrowane przed samym dodaniem do bazy. Konkretnie chodzi mi o znaki: " ' \ załóżmy, że ktoś wpisał: McDonald's (czy apostrof w czystej postaci może być przechowywany w zmiennej przez trzy etapowy formularz, czy trzeba go od razu ucinać znakiem ucieczki? 2) Wyłączyłem na serwerze opcję magic_quotes_gpc. Od tej chwili przy użyciu funkcji mysql_real_escape_string do bazy danych żywcem dodają mi się znaki: " ' \ bez żadnej ucieczki. Czy to jest prawidłowe działanie skryptu? Na przykład, gdy dodam wpis: <?php echo date("Y-m-d"); ?> to ten tekst w czystej postaci dodawany jest do bazy. 3) Napisałem skrypt, który przy pomocy trzech zmiennych GET pobiera z bazy odpowiednie rekordy, pola. Na początku tego skryptu następuje walidacja tych zmiennych: if(preg_match('/^[\węĘóÓąĄśŚłŁźŹżŻńŃ\- ]$/D', $_GET['zmienna']) &&.... walidacja dwóch kolejnych zmiennych) { // jeśli TRUE // tutaj następuje pobranie danych z bazy mysql_query("SELECT.... } else { include("......."); } Czy przy takim zabezpieczeniu (preg_match), j/w konieczne jest używanie funkcji mysql_real_escape_string przed pobraniem danych? Przed mysql_query powinno być: $zmienna = mysql_real_escape_string($_GET['zmienna']); czy można już to sobie darować? 4) Gdzieś wyczytałem, że trzeba filtrować tablice $_SERVER - konkretnie jakie zmienne? 5) Jeśli taki wpis: <?php echo date("Y-m-d"); ?> w bazie jest poprawny, bez żadnych backslash-y to przed wyświetleniem go na stronie wystarczy sama funkcja htmlspecialchars($zmienna, ENT_QUOTES); czy polecacie coś jeszcze? 6) Ostatnie pytanie, na które znam odpowiedź ale jakoś mnie to trapi... czy trzeba filtrować zmienne pól: checkbox, radio i select przekazywane metodą POST? Wybaczcie, że tak obszernie to napisałem ale chciałem jak najjaśniej przekazać wam swoje myśli, problemy, zagwozdki... Proszę o dokładne opisanie/wytłumaczenie każdego punktu, to rozwieje moje wątpliwości. Dziękuję i pozdrawiam. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 00:27 |