Heim >Backend-Entwicklung >PHP-Tutorial >PHP-Programmiertipps zur Verhinderung von SQL-Injection-Angriffen

PHP-Programmiertipps zur Verhinderung von SQL-Injection-Angriffen

WBOY
WBOYOriginal
2023-07-09 21:18:121304Durchsuche

PHP-Programmiertipps zur Verhinderung von SQL-Injection-Angriffen

Einführung:
SQL-Injection ist eine häufige Angriffsmethode für Webanwendungen, indem sie schädlichen SQL-Code in die vom Benutzer eingegebenen Daten einfügen . Um unsere Anwendungen vor SQL-Injection-Angriffen zu schützen, müssen wir einige Programmiertechniken anwenden, um vom Benutzer eingegebene Daten zu filtern, zu maskieren und zu validieren. In diesem Artikel werden mehrere gängige PHP-Programmiertechniken erläutert, die uns dabei helfen, SQL-Injection-Angriffe zu verhindern.

  1. Verwenden Sie vorbereitete Anweisungen
    Vorbereitete Anweisungen sind ein leistungsstarkes Werkzeug in PHP, um SQL-Injection zu verhindern. Dadurch wird sichergestellt, dass die eingegebenen Daten ordnungsgemäß maskiert und als Daten und nicht als Teil des SQL-Codes behandelt werden. Hier ist ein Beispiel für die Verwendung vorbereiteter Anweisungen:
$mysqli = new mysqli("localhost", "username", "password", "database");

if($mysqli->connect_error) {
    die("连接数据库失败: " . $mysqli->connect_error);
}

$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);

$username = $_POST['username'];
$password = $_POST['password'];

$stmt->execute();
$result = $stmt->get_result();

while($row = $result->fetch_assoc()) {
    // 处理结果集
}

$stmt->close();
  1. Verwendung parametrisierter Abfragen
    Ähnlich wie vorbereitete Anweisungen können parametrisierte Abfragen auch SQL-Injection-Angriffe verhindern. Wir können die PDO-Bibliothek verwenden, um parametrisierte Abfragen durchzuführen. Hier ist ein Beispiel für die Verwendung parametrisierter Abfragen:
$dsn = 'mysql:host=localhost;dbname=database';
$username = 'username';
$password = 'password';

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("连接数据库失败:" . $e->getMessage());
}

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);

$username = $_POST['username'];
$password = $_POST['password'];

$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($result as $row) {
    // 处理结果集
}

$stmt->closeCursor();
  1. Eingabevalidierung und -filterung
    Zusätzlich zur Verwendung vorbereiteter Anweisungen und parametrisierter Abfragen sollten wir auch eine Validierung und Filterung von Benutzereingaben durchführen. Dies hilft uns, böswillige Eingaben zu erkennen und zu blockieren. Hier ist ein Beispiel für die Validierung und Filterung von Benutzereingaben:
$username = $_POST['username'];
$password = $_POST['password'];

if(!empty($username) && !empty($password)) {
    // 验证用户名和密码是否符合要求,如长度、字符等
    // ...
    
    // 过滤特殊字符
    $username = filter_var($username, FILTER_SANITIZE_STRING);
    $password = filter_var($password, FILTER_SANITIZE_STRING);
    
    // 执行SQL查询
    // ...
} else {
    die("用户名和密码不能为空");
}

Zusammenfassung:
Um SQL-Injection-Angriffe zu verhindern, müssen wir Maßnahmen ergreifen, um vom Benutzer eingegebene Daten zu filtern, zu maskieren und zu validieren. Durch die Verwendung von vorbereiteten Anweisungen und parametrisierten Abfragen können SQL-Injection-Angriffe wirksam verhindert werden. Gleichzeitig sind Eingabevalidierung und -filterung auch wichtige Abwehrmaßnahmen. Durch die Verwendung dieser PHP-Programmiertipps können wir die Sicherheit unserer Anwendungen verbessern und Benutzerinformationen und Datenbanksicherheit schützen.

Das obige ist der detaillierte Inhalt vonPHP-Programmiertipps zur Verhinderung von SQL-Injection-Angriffen. 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