İçeriğe geç

SQL enjeksiyonu (ARCH7100)

Anahtar php.security.sql-injection · Önem error · Kategori security · CWE CWE-89

SQL sorgusunu kullanıcı girdisiyle dize birleştirerek kurmak, saldırganların sorgu yapısını değiştirip kimlik doğrulamayı atlamasına veya tüm tabloyu sızdırmasına olanak tanır. Parametreli sorgular girdiyi her zaman veri olarak ele alır.

<?php
$pdo = new PDO($dsn, $user, $pass);
$email = $_GET['email'];
$stmt = $pdo->query("SELECT * FROM users WHERE email = '$email'");
$row = $stmt->fetch();
<?php
$pdo = new PDO($dsn, $user, $pass);
$email = $_GET['email'];
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = ?');
$stmt->execute([$email]);
$row = $stmt->fetch();

Sorguları hazırlanmış ifadeler ve bağlı parametrelerle kurun; kullanıcı girdisini asla SQL metnine birleştirmeyin.