Heim  >  Artikel  >  Backend-Entwicklung  >  So verhindern Sie SQL-Injection-Angriffe in der PHP-Entwicklung

So verhindern Sie SQL-Injection-Angriffe in der PHP-Entwicklung

WBOY
WBOYOriginal
2023-06-27 20:53:371148Durchsuche

So verhindern Sie SQL-Injection-Angriffe in der PHP-Entwicklung

SQL-Injection-Angriffe beziehen sich auf die dynamische Erstellung von SQL-Anweisungen in Webanwendungen und die anschließende Ausführung dieser SQL-Anweisungen in der Datenbank, wodurch Angreifer böswillige Vorgänge ausführen oder vertrauliche Daten erhalten können. Bei dieser Angriffsmethode müssen Entwickler Schutzmaßnahmen ergreifen, um die Sicherheit von Webanwendungen zu gewährleisten. In diesem Artikel erfahren Sie, wie Sie SQL-Injection-Angriffe in der PHP-Entwicklung verhindern.

  1. Parameterbindung

In PHP können Sie PDO oder die MySQLi-Erweiterungsbibliothek verwenden, um die Parameterbindung zu implementieren und SQL-Anweisungen und Eingabeparameter separat auszuführen. Diese Methode kann verhindern, dass Parameter SQL-Ausnahmezeichen und -Anweisungen enthalten, und interne SQL-Injection-Angriffe vermeiden.

Nehmen Sie PDO als Beispiel. Der Code lautet wie folgt:

//准备SQL语句
$sql = "SELECT name, age, email FROM user WHERE id = :id AND age > :age";
$stmt = $pdo->prepare($sql);
 
//绑定参数
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->bindParam(':age', $age, PDO::PARAM_INT);
 
//执行查询语句
$stmt->execute();
  1. String-Escape

Bevor Sie Benutzereingabedaten in der Datenbank speichern, müssen Sie die Escape-Funktion verwenden, um die Zeichenfolge zu maskieren. In PHP können die Funktionen mysql_real_escape_string() und mysqli_real_escape_string() eine Escape-Funktion implementieren. Diese Methode ist eine vorbeugende Maßnahme auf niedrigem Niveau und wird in Verbindung mit anderen sichereren Schutzmaßnahmen empfohlen.

Codebeispiel:

//获取用户输入
$username = $_POST['username'];
$password = $_POST['password'];

//转义字符串
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

//准备SQL,然后查询
$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
mysql_query($sql);
  1. Eingabeprüfung

Eingabeprüfung bezieht sich auf das Filtern und Validieren von Eingabeparametern, um sicherzustellen, dass die Eingabe zulässig ist und dem erwarteten Typ und Format entspricht. Dieser Ansatz kann einige potenzielle Sicherheitslücken durch SQL-Injection vermeiden. Wenn der Parameter der Abfrage beispielsweise eine Zahl ist, können Sie mit der Funktion is_numeric() prüfen, ob es sich um eine Zahl handelt. Wenn der Parameter der Abfrage ein String ist, können Sie mit der Funktion ctype_alpha() prüfen, ob er nur Buchstaben enthält.

//对用户输入进行检查
if (is_numeric($_GET['id'])) {
    $id = $_GET['id'];
    
    //查询数据库
    $sql = "SELECT * FROM users WHERE id = $id";
    mysql_query($sql);
}
  1. Datenbankberechtigungskontrolle

Bei der Entwicklung von Webanwendungen können Sie bestimmte Konten und Berechtigungen verwenden, um eine Verbindung zur Datenbank herzustellen. Beim Einrichten von Konten und Berechtigungen sollte sorgfältig darauf geachtet werden, dass nur die erforderlichen Daten und Vorgänge autorisiert werden. Ein schreibgeschütztes Konto kann beispielsweise keine INSERT-, UPDATE- und DELETE-Vorgänge ausführen, was das Risiko von SQL-Injection-Angriffen erheblich verringert.

Zusammenfassung:

In diesem Artikel werden vier Methoden zur Verhinderung von SQL-Injection-Angriffen in der PHP-Entwicklung vorgestellt, darunter Parameterbindung, String-Escape, Eingabeprüfung und Datenbankberechtigungskontrolle. Entwickler sollten basierend auf ihren Anwendungsszenarien und Anforderungen geeignete Schutzmaßnahmen auswählen, um die Sicherheit von Webanwendungen zu gewährleisten. Gleichzeitig sind ein rechtzeitiges Upgrade der PHP-Version und ein Update der Datenbanksoftware auch wirksame Möglichkeiten, SQL-Injection-Angriffe zu verhindern.

Das obige ist der detaillierte Inhalt vonSo verhindern Sie SQL-Injection-Angriffe in der PHP-Entwicklung. 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