Aktueller Standort: Startseite> Neueste Artikel> [So verhindern Sie die SQL -Injektion beim Abfragen durch die Real_Query -Funktion und sicherstellen Sie die Datenbanksicherheit

[So verhindern Sie die SQL -Injektion beim Abfragen durch die Real_Query -Funktion und sicherstellen Sie die Datenbanksicherheit

gitbox 2025-06-11

In der Webentwicklung ist die SQL -Injektion eine gemeinsame Angriffsmethode. Angreifer manipulieren die Datenbank, indem sie böswilligen Code in SQL -Abfrageanweisungen einfügen und dann Daten stehlen, ändern, löschen und sogar Systemberechtigungen erhalten. Um die SQL -Injektion zu verhindern, müssen PHP -Entwickler wirksame Maßnahmen ergreifen, um die Sicherheit der Datenbank zu schützen. In diesem Artikel wird vorgestellt, wie Sie sichere Abfragen durch die Real_Query -Funktion ausführen, um das Risiko einer SQL -Injektion zu vermeiden.

Was ist die SQL -Injektion?

Die SQL -Injektion ist eine Sicherheitsanfälligkeit, die auftritt, wenn Entwickler die Benutzereingaben nicht ordnungsgemäß behandeln. Der Angreifer trägt die Logik der Datenbankabfrageanweisungen durch Eingabe speziell erstelltes SQL -Code, um illegale Operationen zu erreichen. Gemeinsame Angriffsmethoden sind:

  • Sehen Sie sensible Daten in der Datenbank an

  • Daten löschen oder ändern

  • Bypass -Authentifizierung

Grundprinzipien zur Verhinderung der SQL -Injektion

  1. Überprüfen und reinigen Sie die Benutzereingabe immer : Alle von den Benutzern eingegebenen Daten enthalten möglicherweise böswillige Inhalte, und Entwickler müssen der Eingabe filtern oder entkommen, um sicherzustellen, dass diese Daten die SQL -Abfragen nicht beeinträchtigen können.

  2. Verwenden Sie Vorverarbeitungsanweisungen und Parameterbindung : Vorverarbeitungsanweisungen können SQL -Anweisungen von der Benutzereingabe trennen, wodurch böswillige Eingaben, die die Struktur von SQL -Anweisungen direkt beeinflussen, direkt vermeiden können.

  3. Einschränken der Datenbank Benutzerberechtigungen : Datenbankkonten sollten nur Berechtigungen haben, um die erforderlichen Vorgänge auszuführen, um zu vermeiden, dass Datenbankkonten zu viele Berechtigungen gewährt werden.

  4. Verwenden von SQL -Abfrageprotokollen : Durch Aufzeichnen und Analysieren von SQL -Abfrageprotokollen können Entwickler potenziell böswilliges Verhalten entdecken und blockieren.

Übersicht über die Funktion real_query

real_query ist eine Funktion, die von der MySQLI -Erweiterung in PHP bereitgestellt wird und zur Ausführung von SQL -Abfragen verwendet wird. Wenn Sie die ursprüngliche SQL -Abfrage ausführen müssen, können Sie Real_Query verwenden, kann aber auch zu einer Sicherheitsanfälligkeit bei der SQL -Injektion werden, wenn die Benutzereingabe nicht korrekt verarbeitet wird. Daher müssen Sie bei der Verwendung von Real_Query besonders vorsichtig sein.

 <?php
$conn = new mysqli("localhost", "username", "password", "database");

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM users WHERE username = '".$_GET['username']."'";

if ($conn->real_query($sql)) {
    $result = $conn->use_result();
    while ($row = $result->fetch_assoc()) {
        echo "Username: " . $row['username'];
    }
}
?>

Im obigen Code verwendet die SQL Query -Anweisung die Benutzereingabe von $ _get ['Benutzername'] direkt. Wenn der Benutzer einen böswilligen SQL -Code wie 'oder 1 = 1 - eingibt, führt er zu SQL -Injektionsangriffen. Daher muss die Benutzereingabe vor der Ausführung von Real_Query verarbeitet werden.

VORHANDEN SIE SQL -Injektion: Verwenden Sie Vorverarbeitungsanweisungen

Eine der effektivsten Möglichkeiten zur Verhinderung der SQL -Injektion ist die Verwendung vorbereiteter Aussagen . Durch Vorverarbeitungsanweisungen werden SQL -Anweisungen und Daten getrennt, und die Datenbank -Engine verarbeitet die Daten als Normalwerte, ohne sie in SQL -Code zu analysieren. Dies kann leicht mit der MySQLI -Erweiterung von PHP erreicht werden.

Verwenden Sie Vorbereitung und bind_param

 <?php
$conn = new mysqli("localhost", "username", "password", "database");

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $_GET['username']);

if ($stmt->execute()) {
    $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
        echo "Username: " . $row['username'];
    }
}
?>

In diesem Beispiel kompiliert die Funktion zuerst die SQL -Abfrage, und die Funktion BIND_PARAM bindet die Benutzereingabe an die Parameter in der Abfrage ( ? ). Auf diese Weise werden die vom Benutzer eingegebenen Daten als einfacher Text verarbeitet, wodurch SQL -Injektionsangriffe vermieden werden.

Verwenden Sie Real_Query , um die SQL -Injektion zu verhindern

Wenn Sie Real_Query verwenden müssen, müssen Sie darauf achten, den Benutzereingaben manuell zu entkommen, um sicherzustellen, dass die Eingabe keinen böswilligen Code enthält. MySQLI bietet die Funktion real_escape_string , um Sonderzeichen in einer Zeichenfolge zu entkommen.

 <?php
$conn = new mysqli("localhost", "username", "password", "database");

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$username = $conn->real_escape_string($_GET['username']);
$sql = "SELECT * FROM users WHERE username = '$username'";

if ($conn->real_query($sql)) {
    $result = $conn->use_result();
    while ($row = $result->fetch_assoc()) {
        echo "Username: " . $row['username'];
    }
}
?>

Mit Real_escape_String können wir den Sonderzeichen in der Benutzereingabe entkommen, um zu vermeiden, dass ein bösartiger SQL -Code ausgeführt wird. Obwohl dieser Ansatz das Risiko einer SQL -Injektion verringern kann, kann er nicht vollständig vermieden werden. Daher wird empfohlen, zuerst Vorverarbeitungsanweisungen zu verwenden.

Andere Vorsichtsmaßnahmen

Zusätzlich zur Verwendung von Real_Query- und Vorverarbeitungsanweisungen gibt es einige zusätzliche Sicherheitsmaßnahmen, die das Risiko einer SQL -Injektion verringern können:

  1. Verwenden von PDO (PHP -Datenobjekte) : PDO unterstützt auch Vorverarbeitungsanweisungen und ist flexibler als MySQLI , geeignet für eine Vielzahl von Datenbanken.

  2. Minimieren Sie die Datenbankberechtigungen : Stellen Sie sicher, dass Datenbankbenutzer nur Berechtigungen haben, um die erforderlichen Vorgänge auszuführen, den Zugriff auf die Datenbank zu begrenzen und die potenzielle Sabotage -Fähigkeit von Angreifern zu verringern.

  3. RECHTE UPDATE UND PLATZE : Überprüfen und aktualisieren Sie regelmäßig PHP-, MySQL- und Server -Umgebungen, um sicherzustellen, dass alle Sicherheitslücken festgelegt werden.

  4. Aktivieren Sie die Webanwendungs ​​-Firewall (WAF) : WAF kann Angriffe wie die SQL -Injektion erkennen und abfangen und ist eine wichtige Barriere für das Schutzsystem.

Zusammenfassen

Die SQL -Injektion ist einer der häufigsten Webangriffe, und PHP -Entwickler müssen effektive Maßnahmen ergreifen, um die Sicherheit der Datenbank zu gewährleisten. Durch korrekte Verwendung von Real_Query- und Vorverarbeitungsanweisungen kann das Risiko einer SQL -Injektion effektiv verhindert werden. Darüber hinaus sollten Entwickler auch andere Sicherheitsmaßnahmen wie Eingabeüberprüfung, Datenbankberechtigungsverwaltung und Sicherheits -Patch -Updates kombinieren, um die Gesamtsicherheit des Systems zu verbessern.

  • Verwandte Tags:

    SQL