Bu wikiHow makalesi sana PHP'de Hazır İfadeler kullanarak SQL enjeksiyonunu nasıl önleyeceğinizi öğretir. SQL enjeksiyonu, günümüzde Web uygulamalarında en yaygın güvenlik açıklarından biridir. Hazır İfadeler, bağlı parametreleri kullanır ve değişkenleri SQL dizeleriyle birleştirmez, bu da bir saldırganın SQL ifadesini değiştirmesini imkansız hale getirir.
Hazırlanan İfadeler, değişkeni derlenmiş SQL ifadesi ile birleştirir, böylece SQL ve değişkenler ayrı ayrı gönderilir. Değişkenler daha sonra SQL ifadesinin bir parçası değil, yalnızca dizeler olarak yorumlanır. Aşağıdaki adımlarda yer alan yöntemleri kullanarak, mysql_real_escape_string() gibi başka SQL enjeksiyon filtreleme teknikleri kullanmanıza gerek kalmayacaktır.
adımlar
Bölüm 1 / 2: SQL Enjeksiyonunu Anlama
Adım 1. SQL Injection, SQL veritabanı kullanan uygulamalardaki bir tür güvenlik açığıdır
Güvenlik açığı, bir SQL Bildiriminde bir kullanıcı girişi kullanıldığında ortaya çıkar:
$isim = $_GET['kullanıcı adı']; $query = "tbl_user NERDEN şifreyi SEÇ isim = '$isim'";
Adım 2. Bir kullanıcının kullanıcı adı değişkenine URL değişkenine girdiği değer, $name değişkenine atanacaktır
Daha sonra doğrudan SQL deyimine yerleştirilir ve kullanıcının SQL deyimini düzenlemesini mümkün kılar.
$isim = "yönetici" VEYA 1=1 -- "; $query = "tbl_user NERDEN şifreyi SEÇ isim = '$isim'";
Adım 3. SQL veritabanı daha sonra SQL deyimini aşağıdaki gibi alacaktır:
tbl_users NEREDE isim = 'yönetici' VEYA 1=1 -- 'DEN şifreyi SEÇİN
-
Bu geçerli SQL'dir, ancak kullanıcı için bir parola döndürmek yerine, ifade tbl_user tablosundaki tüm parolaları döndürür. Bu, web uygulamalarınızda istediğiniz bir şey değildir.
Bölüm 2/2: Hazır İfadeler Oluşturmak için mySQLi'yi Kullanma
Adım 1. mySQLi SELECT Sorgusunu oluşturun
mySQLi Hazır İfadeleri kullanarak bir tablodan veri SEÇMEK için aşağıdaki kodu kullanın.
$isim = $_GET['kullanıcı adı']; if ($stmt = $mysqli->prepare("tbl_users WHERE name=? $stmt->bind_param("s", $isim); // İfadeyi çalıştır. $stmt->execute(); // Değişkenleri sorgudan alın. $stmt->bind_result($geçiş); // Verileri getir. $stmt->getir(); // Verileri göster. printf("%s kullanıcısının şifresi %s\n", $name, $pass); // Hazırlanan ifadeyi kapatın. $stmt->kapat(); }
Not: $mysqli değişkeni, mySQLi Bağlantı Nesnesidir
Adım 2. mySQLi INSERT Sorgusunu oluşturun
mySQLi Hazır İfadeleri kullanarak bir tabloya veri EKLEMEk için aşağıdaki kodu kullanın.
$isim = $_GET['kullanıcı adı']; $şifre = $_GET['şifre']; if ($stmt = $mysqli->prepare("INSERT INTO tbl_users (isim, parola) VALUES (?, ?)")) { // Değişkenleri dizeler olarak parametreye bağlayın. $stmt->bind_param("ss", $isim, $şifre); // İfadeyi çalıştır. $stmt->execute(); // Hazırlanan ifadeyi kapatın. $stmt->kapat(); }
Not: $mysqli değişkeni, mySQLi Bağlantı Nesnesidir
Adım 3. mySQLi UPDATE Sorgusunu oluşturun
mySQLi Hazır İfadeleri kullanarak bir tablodaki verileri GÜNCELLEMEk için aşağıdaki kodu kullanın.
$isim = $_GET['kullanıcı adı']; $şifre = $_GET['şifre']; if ($stmt = $mysqli->prepare("UPDATE tbl_users SET password = ? WHERE name = ?")) { // Değişkenleri parametreye dize olarak bağlayın. $stmt->bind_param("ss", $şifre, $isim); // İfadeyi çalıştır. $stmt->execute(); // Hazırlanan ifadeyi kapatın. $stmt->kapat(); }
Not: $mysqli değişkeni, mySQLi Bağlantı Nesnesidir
Adım 4. mySQLi DELETE Sorgusunu oluşturun
Aşağıdaki komut dosyası, mySQLi Hazır İfadeler kullanılarak bir tablodan verilerin nasıl SİLileceğidir.
$isim = $_GET['kullanıcı adı']; $şifre = $_GET['şifre']; if ($stmt = $mysqli->prepare("DELETE FROM tbl_users WHERE name = ?")) { // Değişkeni bir dizge olarak parametreye bağlayın. $stmt->bind_param("s", $isim); // İfadeyi çalıştır. $stmt->execute(); // Hazırlanan ifadeyi kapatın. $stmt->kapat(); }