Heim >Datenbank >MySQL-Tutorial >Reicht „mysqli_real_escape_string' aus, um SQL-Injection zu verhindern?

Reicht „mysqli_real_escape_string' aus, um SQL-Injection zu verhindern?

Susan Sarandon
Susan SarandonOriginal
2024-12-16 13:15:19489Durchsuche

Is `mysqli_real_escape_string` Enough to Prevent SQL Injection?

Ist mysqli_real_escape_string ausreichend, um SQL-Injection und Angriffe abzuwehren?

Trotz seiner weit verbreiteten Verwendung ist mysqli_real_escape_string kein undurchdringlicher Schutz gegen SQL-Injection. Wie im bereitgestellten Beispiel dargestellt:

$email = mysqli_real_escape_string($db_con, $_POST['email']);
$psw = mysqli_real_escape_string($db_con, $_POST['psw']);

$query = "INSERT INTO `users` (`email`, `psw`) VALUES ('$email', '$psw')";

Dieser Code versucht, sich vor böswilligen Eingaben zu schützen, indem er einfache Anführungszeichen mithilfe von mysqli_real_escape_string maskiert. Allerdings bleibt dieser Ansatz anfällig für SQL-Injection, wie dieser Angriff zeigt:

myEmail = 'user@example.com' OR 0 = 1

In diesem Fall nutzt die Injektion die Tatsache aus, dass mysqli_real_escape_string nur einfache Anführungszeichen maskiert. Durch das Einfügen der Zeichenfolge myEmail = 'user@example.com' OR 0 = 1 in das E-Mail-Feld kann der Angreifer die Authentifizierung umgehen und sich unbefugten Zugriff verschaffen.

Um die SQL-Injection wirksam zu verhindern, sollten Sie die Verwendung vorbereiteter oder parametrisierter Anweisungen in Betracht ziehen Abfragen. Diese Mechanismen trennen Daten strikt von Anweisungen und eliminieren so die Möglichkeit einer Eingabeverunreinigung.

Vorbereitete Anweisungen führen Abfragen mit vom Benutzer bereitgestellten Parametern aus. Diese Werte werden sicher in die Abfrage eingefügt, ohne deren Struktur zu ändern. Zum Beispiel:

$stmt = $mysqli->prepare("INSERT INTO `users` (`email`, `psw`) VALUES (?, ?)");
$stmt->bind_param("ss", $email, $psw);

In Situationen, in denen vorbereitete Anweisungen nicht durchführbar sind, implementieren Sie eine strikte Whitelist, um zulässige Eingaben einzuschränken. Dadurch wird sichergestellt, dass nur sichere Werte verarbeitet werden.

Zusammenfassend lässt sich sagen, dass mysqli_real_escape_string zwar einen gewissen Schutz gegen SQL-Injection bietet, aber nicht narrensicher ist. Vorbereitete Anweisungen oder parametrisierte Abfragen bieten zusammen mit Whitelisting robustere Abwehrmechanismen gegen diese Angriffe.

Das obige ist der detaillierte Inhalt vonReicht „mysqli_real_escape_string' aus, um SQL-Injection zu verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn