Mit der kontinuierlichen Weiterentwicklung der Internettechnologie haben die Sicherheitsprobleme von Websites und Anwendungen immer mehr Aufmerksamkeit auf sich gezogen. Unter diesen sind SQL-Injection-Angriffe eine häufige Angriffsmethode, und in PHP geschriebene Websites und Anwendungen sind besonders anfällig für Angriffe. Daher wird in diesem Artikel erläutert, wie man SQL-Injection-Angriffe in PHP-Dateien vermeidet, um die Sicherheit von Websites und Anwendungen zu gewährleisten.
Vorbereitete Anweisungen sind eine wichtige Möglichkeit, SQL-Injection-Angriffe zu verhindern. Es trennt SQL-Anweisungen und Parameter und vermeidet so die Möglichkeit von Angriffen durch falsche Eingaben. Zu den häufig verwendeten vorbereiteten Anweisungen in PHP gehören PDO und MySQLi. Das Folgende ist ein Beispiel für die Verwendung von PDO:
//连接数据库 $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); //预处理SQL语句 $stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = :password'); //绑定参数 $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); //执行查询 $stmt->execute();
Parameterisierte Abfragen ähneln vorbereiteten Anweisungen und trennen auch SQL-Anweisungen und Parameter. Der Unterschied besteht darin, dass sich die parametrisierte Abfrage auf die Verwendung von Platzhaltern zum Ersetzen von Parametern in der SQL-Anweisung und die individuelle Übergabe der Parameter an die Abfragefunktion bezieht. Hier ist ein Beispiel mit MySQLi:
//连接数据库 $conn = mysqli_connect('localhost', 'username', 'password', 'test'); //参数化查询 $stmt = mysqli_prepare($conn, 'SELECT * FROM users WHERE username = ? AND password = ?'); mysqli_stmt_bind_param($stmt, 'ss', $username, $password); mysqli_stmt_execute($stmt);
Benutzereingaben sollten ordnungsgemäß gefiltert und validiert werden, bevor sie als SQL-Abfragekriterien verwendet werden. Zu den häufig verwendeten Filterfunktionen in PHP gehören htmlspecialchars() und strip_tags(), die HTML-Tags und Sonderzeichen herausfiltern können. Zum Beispiel:
//使用htmlspecialchars()过滤用户输入 $username = htmlspecialchars($_POST['username'], ENT_QUOTES, 'UTF-8'); $password = htmlspecialchars($_POST['password'], ENT_QUOTES, 'UTF-8'); //查询用户 $stmt = $pdo->query("SELECT * FROM users WHERE username = '{$username}' AND password = '{$password}'");
Bevor Sie Benutzereingaben als SQL-Abfragebedingungen verwenden, sollten Sie auch prüfen, ob der Variablentyp korrekt ist. Wenn es sich bei der Benutzereingabe beispielsweise um eine Zeichenfolge handelt, muss sie in Anführungszeichen gesetzt werden. Wenn es sich bei der Benutzereingabe um eine Zahl handelt, muss sie nicht in Anführungszeichen gesetzt werden. Zu den häufig verwendeten Typprüfungsfunktionen in PHP gehören is_numeric() und is_string(), mit denen wir überprüfen können, ob es sich bei Variablen um Zahlen und Zeichenfolgen handelt. Zum Beispiel:
$username = $_POST['username']; if (is_string($username)) { //将字符串用引号括起来 $username = "'" . $username . "'"; } $password = $_POST['password']; if (is_string($password)) { //将字符串用引号括起来 $password = "'" . $password . "'"; } //查询用户 $stmt = $pdo->query("SELECT * FROM users WHERE username = {$username} AND password = {$password}");
Kurz gesagt, SQL-Injection-Angriffe sind eine gefährliche und häufige Angriffsmethode, und es müssen wirksame Maßnahmen ergriffen werden, um sie zu verhindern. In diesem Artikel werden verschiedene Methoden zur Vermeidung von SQL-Injection-Angriffen vorgestellt, z. B. vorbereitete Anweisungen, parametrisierte Abfragen, das Filtern von Eingaben und das Überprüfen von Variablentypen. Ich hoffe, dass dies für PHP-Entwickler hilfreich ist.
Das obige ist der detaillierte Inhalt vonWie vermeide ich SQL-Injection-Angriffe in PHP-Dateien?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!