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

Najlepszy sposób na zabezpieczenie zapytania SQL w PHP

Zapytanie, które pokazałeś w pytaniu nie używa wartości podanych przez użytkownika, więc nie ma przypadku SQL Injection, ale w ogólnym przypadku:-

Po pierwsze, musisz zweryfikować wszystkie dane wejściowe użytkownika (nazwy użytkowników, adresy e-mail itp.) przed użyciem ich w zapytaniu. Na przykład:– Jeśli w nazwie użytkownika zezwolono tylko na znaki alfanumeryczne, przed przystąpieniem do tworzenia zapytania do bazy danych należy sprawdzić, czy dane wejściowe są rzeczywiście alfanumeryczne, a także sprawdzić rozmiar wszystkich danych wejściowych.

Po tym, moim zdaniem, Gotowe Oświadczenia to najlepszy wybór do zapobiegania wstrzykiwaniu SQL.

Problem z mysql_real_escape_string():-

Ponieważ mysql_real_escape_string() ucieka ze znaków zgodnie z domyślnym zestawem znaków, więc jest to lepsze niż funkcja addslashes() i prawidłowo oczyszcza Iniekcje SQL wynikające z nadużywania zestawów znaków wielobajtowych , ale w innym artykule tutaj , pokazany jest scenariusz obejścia, który wyjaśnia, że ​​wstrzykiwanie nadal można wykonać.

Rozwiązanie:-

Zatem właściwym i lepszym sposobem zapobiegania wstrzykiwaniu SQL jest użycie przygotowanych instrukcji. Jest to technika, w której instrukcje SQL są prekompilowane przed wprowadzeniem danych wejściowych użytkownika (parametry) i są traktowane jako szablony SQL wielokrotnego użytku. Tak więc oddziela dane wejściowe użytkownika od rzeczywistego kodu SQL, a parser SQL nigdy nie analizuje danych wejściowych użytkownika.

Oprócz bezpieczeństwa optymalizuje również zapytanie SQL pod kątem szybkości. Pomaga w przypadkach, gdy trzeba wielokrotnie uruchomić to samo zapytanie z różnymi danymi wejściowymi użytkownika.

Więcej informacji na temat implementacji można znaleźć w podręczniku PHP.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja mysql_escape_string() jest przestarzała użyj mysql_real_escape_string() Codeigniter

  2. Przewodnik po projektowaniu bazy danych dla Menedżera zadań w MySQL

  3. LEWE DOŁĄCZ w ZF2 za pomocą TableGateway

  4. Błąd 1022 — Nie można pisać; zduplikowany klucz w tabeli

  5. Jak liczyć elementy na liście oddzielonej przecinkami MySQL