Atak SQL Injection gdy na stronie jest Magic Quotes

panczo12d

Użytkownik
Dołączył
Styczeń 22, 2011
Posty
61
Witam. Czy atak SQL Injection może mieć miejsce na serwerach w których włączona jest opcja Magic Quotes?
 

hxv

Były Moderator
Dołączył
Sierpień 9, 2006
Posty
797
Tak, magic_quotes nie zabezpiecza w 100% (np. jeśli teoretycznie w zapytaniu powinna pojawić się liczba i zmienna nie jest objęta w apostrofy) + istnieje możliwość, że w skrypcie z jakiegoś powodu zmienna będzie 'odfiltrowana' (stripslashes) i nie będzie ponownie przefiltrowana przed wstawieniem do zapytania.
 

panczo12d

Użytkownik
Dołączył
Styczeń 22, 2011
Posty
61
czy można używać funkcji char() w mysql do takiej zamiany np.
mamy zapytanie
SELECT * FROM konta WHERE login = '' AND haslo = ''
w miejsce loginu wstawia się zmienne $_GET, $_POST które są slashowane np:
gdy wpiszę w login ' or '1' = '1' to zapytanie będzie wyglądać:
SELECT * FROM konta WHERE login = '\' or \'1\' = \'1\'' AND haslo = ''
a co jak wpiszę
char(39,32,111,114,32,39,49,39,32,61,32,39,49,39) w loginie. Czy takie coś zadziała?
Czy można zamieniać apostrofy w zapytaniu na
char(39) ?
 

hxv

Były Moderator
Dołączył
Sierpień 9, 2006
Posty
797
Nie, tak to się nie uda. Atak możnaby wykonać np. w przypadku takiego kodu:
PHP:
mysql_query("SELECT * FROM `news` WHERE `id` = {$_GET['id']}");
Wówczas CHAR() może przydać się do tworzenia stringów. Jak pisałem - jeśli zmienna jest w apostrofach to jest traktowana jako zwykły ciąg znaków i nie jest w praktycznie żaden sposób interpretowana.
 

kkowalskipl

Użytkownik
Dołączył
Maj 17, 2011
Posty
19
Tak jest możliwe. Do zabezpieczenia skryptów, a właściwie zmiennych wykorzystuj własną funkcję, jeśli jednak nie potrafisz takowej napisać używaj mysql_real_escape_string(). I pamietaj! Zabezpieczaj zmienne zarówno wchodzące do bazy jak i wychodzące, nigdy nie wiadomo co może się stać :).
 
Do góry Bottom