sobota, 9 sierpnia 2008

Firebird i cytaty w PHP


Każdy programista PHP (i nie tylko!) chyba wie, że cytaty wymagają specjalnej kontroli, jej brak może być źródłem ataków typu SQL Injection.
Pamiętałem o tym również i ja i zabezpieczyłem się oczywiście włączając opcję automatycznego dodawania backslashy przy znakach specjalnych - magic_quotes_gpc. Np. wysyłając tekst w formularzu:
\t\e\s\t

Po stronie serwera otrzymam:
\\t\\e\\s\\t

Czyli wszystko fajnie :)

Troszkę się zdziwiłem gdy na mantisie dwa dni temu zobaczyłem zgłoszony błąd od testera, że nie sprawiają mu problemów ataki typu SQL Injection. Do głowy przyszło mi tylko jedna myśl - "WTF!?".
Obadałem kod sprawdzając czy napewno dodawane są backslashe - all ok.
Później uznałem, że trzeba to samemu sprawdzić. Wpisuje w formularzy blabla', wysyłam formularz i boom;] sypneło się:) No tylko dlaczego skoro po stronie serwera otrzymałem: blabla\' ?? Google.pl....
Trochę poszperałem aż trafiłem na artykuł o obsłudze cytatów w Firebird. I tam ciekawostka ! Okazało się, że w Firebirdzie napis: blabla\' oznacza po prostu blabla\' ! :) Żeby zabezpieczyć taki ciąg nie należy dodawać backslasha tylko wpisać blabla'' ! Czyli podwajamy znak specjalny (zachciało im się innowacji:|). Co więcej php ma funkcje do automatycznego wykonywania tego (pod tym względem <3 PHP - ma ogrom przydatnych funkcji) ! :D Wystarczy ustawić zmienną magic_quotes_sybase na On w php.ini i jest ok:)
Jeśli nie ma się dostępu do php.ini trzeba to wykonać przez .htaccess ponieważ ustawienie tego przez ini_set z tego co zauważyłem nie jest możliwe.

Treść .htaccess:
php_value magic_quotes_sybase On


No i problem rozwiązany :)

1 komentarz: