SQL -Injektionsangriffe sind häufig und äußerst bedrohliche Sicherheitslücken in der Webentwicklung. Der Angreifer nutzt diese Sicherheitsanfälligkeit, um böswilligen Code in die Datenbank zu injizieren, wodurch die Datenbankintegrität zerstört oder vertrauliche Informationen ausgelöst werden. In der PHP -Form -Verarbeitung besteht der Schlüssel zur effektiven Verhinderung von SQL -Injektionsangriffen darin, die von den Benutzern eingegebenen Daten strikt zu filtern und zu codieren. In diesem Artikel wird ausführlich erläutert, wie SQL -Injektionsangriffe verhindern und Lösungen in Kombination mit Code -Beispielen bereitgestellt werden.
Vorverarbeitungsanweisungen sind eine Technologie, die SQL-Anweisungen zum Datenbankserver zum Parsen und Kompilieren vorsiedelt, was die SQL-Injektion effektiv verhindern kann. Es trennt die Benutzereingabedaten von SQL -Anweisungen durch parametrisierte Abfragen, wodurch die Injektion böswilliger Daten vermieden wird. In PHP bietet PDO eine bequeme Funktionalität für Vorverarbeitungsanweisungen, und das Folgende ist der Beispielcode für die Implementierung:
// Stellen Sie eine Verbindung zur Datenbank her
$dsn = 'mysql:host=localhost;dbname=test';
$username = 'root';
$password = 'password';
try {
$pdo = new PDO($dsn, $username, $password);
// Stellen Sie den Fehlermodus auf eine Ausnahme ein
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Die Datenbankverbindung ist fehlgeschlagen:' . $e->getMessage();
}
// VorbereitenSQLStellungnahme
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
// Binden Sie Parameter
$stmt->bindParam(':username', $username);
// Eine Frage ausführen
$stmt->execute();
// Ergebnisse erhalten
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Ausgangsergebnis
foreach ($result as $row) {
echo $row['username'];
}
In diesem Code wird zunächst die SQL Query -Anweisung über die Methode prepe () erstellt, und der Platzhalter: Der Benutzername wird anstelle des vom Benutzer eingegebenen Benutzernamen verwendet. Der tatsächliche Benutzername ist durch die BindParam () -Methode an den Platzhalter gebunden, und die Abfrage wird schließlich ausgeführt, wodurch die Einfügung von Benutzerdaten direkt in die SQL -Anweisung einfügen wird.
PHP bietet eine Vielzahl von Filterfunktionen zum Reinigen und Filtern von Benutzereingabedaten, insbesondere zum Entfernen von Sonderzeichen und SQL -Schlüsselwörtern, die SQL -Injektionsangriffe auslösen können. MySQLI_REAL_ESCAPE_STRING () ist eine häufig verwendete Filterfunktion, die uns helfen kann, die von den Benutzern eingegebenen Zeichenfolgen zu entkommen und die Auswirkungen von Sonderzeichen auf SQL -Anweisungen zu vermeiden. Hier ist ein Codebeispiel mit dieser Funktion:
// Stellen Sie eine Verbindung zur Datenbank her
$servername = 'localhost';
$username = 'root';
$password = 'password';
$dbname = 'test';
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Überprüfen Sie, ob die Verbindung erfolgreich ist
if (!$conn) {
die('Die Datenbankverbindung ist fehlgeschlagen: ' . mysqli_connect_error());
}
// FILDEN SIE UNSERNENSENDATIONEN
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
// Eine Frage ausführen
$sql = "SELECT * FROM users WHERE username = '{$username}' AND password = '{$password}'";
$result = mysqli_query($conn, $sql);
// Verarbeitungsergebnisse
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
echo 'Benutzername ist: ' . $row['username'];
}
} else {
echo 'Falscher Benutzername oder Passwort';
}
// Schließen Sie die Verbindung
mysqli_close($conn);
Durch die Funktion mySQLI_REAL_ESCAPE_STRING () filtern wir den vom Benutzer eingegebenen Benutzernamen und Kennwort, wodurch Sonderzeichen oder SQL -Schlüsselwörter ausgeführt werden, wodurch die SQL -Injektionsangriffe verhindert werden.
Es gibt viele Möglichkeiten, SQL -Injektionsangriffe in PHP -Formen zu verhindern, und die häufigsten und effektivsten Strategien umfassen die Verwendung von Vorverarbeitungsanweisungen und Filterfunktionen. In beiden Fällen ist es wichtig sicherzustellen, dass alle von den Benutzern eingegebenen Daten streng gefiltert und codiert werden, um die Sicherheit der Website zu gewährleisten. Entwickler sollten außerdem regelmäßige Sicherheitsüberprüfungen und Sicherheitsanfälligkeiten durchführen, um mögliche Sicherheitsrisiken umgehend zu beheben und Benutzerdaten und Website -Informationen zu schützen.