W Nowym kodzie PHP fragment, nadal jesteś podatny na zastrzyki.
Używasz przygotowanego oświadczenia we wstawce, ale w rzeczywistości nie używasz prawidłowo mocy preparatów.
Tworząc przygotowane zestawienie, tworzysz zapytanie, w którym zamiast nieprzetworzonych wartości dodajesz symbole zastępcze:
$stmt = $conn->prepare("INSERT INTO Users (email, pw) VALUES (?, ?)");
Znaki zapytania są symbolami zastępczymi i są później zastępowane za pomocą bind_param
metoda:
$stmt->bind_param('ss', $email, $pw);
ss
część wywołania bind informuje bazę danych mysql, że jej dwa ciągi, które są przekazywane do bazy danych (s dla string
, ja dla int
itp).
Wiążesz parametr ($name
), ale nie zawiera symbolu zastępczego ani żadnego rodzaju odwołania w zapytaniu..?
Z drugiej strony, Twoja instrukcja select jest nadal niebezpieczna i podatna na luki.
Prawdopodobnie użyłbym w tym celu przygotowanej instrukcji, podobnie jak w przypadku części insert.
Zawsze chcesz mieć pewność, że dane wejściowe od użytkownika są „bezpieczne” dla bazy danych, jeśli połączysz ciąg zapytania i dodasz do niego dane wejściowe użytkownika, baza danych nie zmieni ciągów, po prostu je uruchomi.
Używaj tylko standardowego query
wywołuje metody, gdy samodzielnie piszesz pełne zapytanie, bez żadnych parametrów wejściowych, a zwłaszcza bez parametrów wejściowych przekazanych przez użytkownika!