Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Bezpieczeństwo serwisu - zbiór informacji (pytanie)
SeaDog
post
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 biggrin.gif

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.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 00:27