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.