Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysql_escape_string luki w zabezpieczeniach

Zła odpowiedź:

Nie rzetelnie. Odnosisz się do mysql_escape_string() , który nie uwzględnia kodowania połączenia (podczas gdy mysql_real_escape_string() tak).

Może więc starannie spreparowany ciąg, ze starannie spreparowanym niekompletnym kodem UTF8 na początku, może w wyniku, powiedzmy, znak cudzysłowu zostanie zmieniony przez mysql_escape_string() ale sama ucieczka jest ignorowana przez MySQL ponieważ "zobaczy" to jako znak UTF8.

Np.:

0xC2' OR 1=1 ;--

zostanie zmieniony przez mysql_escape_string() jako

0xC2\' OR 1=1 ;--

które zostaną zmontowane do

WHERE password='0xC2\' OR 1=1 ;--';

i widziany przez MySQL (jeśli działało właściwe kodowanie połączenia) jako, powiedzmy,

WHERE password='€' OR 1=1 ;[--';]    <-- the bracketed part is considered a comment and ignored

co byłoby klasycznym wstrzyknięciem SQL.

Ale to zależy od tego, że określiłeś, być może przez odwrócenie uwagi, podwójnie przestarzałą funkcję . Jeśli naprawdę miałeś na myśli mysql_real_escape_string() , to by nie zadziałało.

Zakłada to również, że ani serwer, ani warstwa aplikacji (np. PHP) nie stosują żadnego rodzaju walidacji zestawu znaków podczas wypełniania danych wejściowych. Gdyby tak się stało, nieprawidłowy kod UTF8 zostałby usunięty po przybyciu i nigdy nawet nie był widziany przez mysql_escape_string , co wtedy oczywiście wystarczy.

Prawdziwa odpowiedź:

Nie używaj mysql_escape_string (lub mysql_whatever ) w ogóle. Zostały przestarzałe i Twój kod może przestać działać. Zamiast tego użyj funkcji PDO.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:wydajne zapytanie w kolumnie zbyt długiej do indeksowania

  2. Jaka jest różnica między znacznikiem a nawiasem kwadratowym w instrukcjach SQL?

  3. Pobierz wszystkie wiadomości i wszystkie komentarze

  4. Policz liczbę kolejnych wizyt

  5. Szydzenie PDO z phpunit