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
Freigeben: 2024-12-16 13:15:19
Original
487 Leute haben es durchsucht

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')";
Nach dem Login kopieren

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
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage