PHP'de SQL Enjeksiyonu Nasıl Önlenir (Resimlerle)

İçindekiler:

PHP'de SQL Enjeksiyonu Nasıl Önlenir (Resimlerle)
PHP'de SQL Enjeksiyonu Nasıl Önlenir (Resimlerle)

Video: PHP'de SQL Enjeksiyonu Nasıl Önlenir (Resimlerle)

Video: PHP'de SQL Enjeksiyonu Nasıl Önlenir (Resimlerle)
Video: TV ünitesi kabloları saklama yöntemleri | TV unit cables storage methods 2024, Mayıs
Anonim

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

2542820 1
2542820 1

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

2542820 2
2542820 2

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

2542820 3
2542820 3

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

2542820 4
2542820 4

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(); }

Önerilen: