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.
Hatalı
Bölüm başlığı “Hatalı”<?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();Düzeltme
Bölüm başlığı “Düzeltme”Sorguları hazırlanmış ifadeler ve bağlı parametrelerle kurun; kullanıcı girdisini asla SQL metnine birleştirmeyin.