2010-11-13 14 views
7

W podręczniku PHP, istnieje uwaga:Czy mysql_real_escape_string wystarczy do Anti SQL Injection?

Uwaga: Jeśli funkcja ta nie jest wykorzystywana do danych ewakuacyjnych, zapytanie jest podatny do SQL Injection Attacks.

Czy to wystarczy do wstrzyknięcia anty sql? Jeśli nie, czy możesz podać przykład i dobre rozwiązanie wstrzyknięcia anty sql?

+1

Zobacz [Czy mysql_real_escape_string() W PEŁNI chroni przed iniekcją SQL? ] (http://stackoverflow.com/questions/1220182/does-mysql-real-escape-string-fully-protect-against-sql- injection). –

+0

zdecydowanie duplikat powyższego – mikeycgto

Odpowiedz

6

mysql_real_escape_string zwykle wystarcza, aby uniknąć iniekcji SQL. Zależy to jednak od tego, czy jest wolny od błędów, tj. Istnieje niewielka nieznana szansa, że ​​jest on podatny na ataki (ale nie objawiło się to jeszcze w realnym świecie). Lepszą alternatywą całkowicie wykluczającą iniekcje SQL na poziomie koncepcyjnym jest prepared statements. Obie metody całkowicie zależą od prawidłowego ich zastosowania; to znaczy, że nie będzie cię chronić, jeśli po prostu to zepsujesz.

+1

, aby wyjaśnić: istnieje również szansa, że ​​PDO emuluje przygotowane zapytania (dla mysql) i nie używa natywnych mysql. Nie ma takiej deklaracji w dokumentacji php (lub nie mogę jej znaleźć). – zerkms

+0

"PDO będzie emulować dla sterowników, które ich nie obsługują" --- to za mało, ponieważ: a) zainstalowany (stary) libmysql może nie obsługiwać przygotowany; b) PDO wciąż nie może używać natywnych przygotowanych wyciągów. – zerkms

0

O ile wiem, jest to solidny sposób na uniknięcie ataków typu SQL Injection.

+0

Niestety zapomniałem dodać, że myślę, że możesz zaatakować z adresu URL. – mcbeav

+0

Możesz także, zawsze ograniczać, kto może uzyskać dostęp do bazy danych i kto ma jakie uprawnienia. – mcbeav

0

Najlepsze rozwiązanie to PDO.

Jeśli używasz tradycyjnego mysql_query, wystarczy uruchomić wszystkie dane przez mysql_real_escape_string().

+0

Co to są sparametryzowane zapytania? – Jichao

+0

Sparametryzowane zapytania są również dostępne w rozszerzeniach 'PDO' – stillstanding

Powiązane problemy