Ders 4.1: SQL enjeksiyonu
Bir ziyaretçinin girdisi bir veritabanı sorgusuna yapıştırıldığında ne olduğu: girdi veri olmaktan çıkar ve SQL'in bir parçası olur. Veritabanını ele veren hata mesajları, her zaman doğru olan koşullar ve diğer tabloları sayfaya çeken UNION sorguları. Ve her seferinde işe yarayan düzeltme: sorgu ile verinin ayrı yolculuk ettiği parametreli sorgular (hazırlanmış ifadeler). Laboratuvarda mağazanın ürün sayfası SQL'ini URL'den kuruyor. Enjeksiyonu doğruluyor, bir UNION sorgusunun kullanıcı adlarını ve parola özetlerini yazdırdığını görüyor, satırı buluyor, PDO prepare ve execute ile yeniden yazıyor ve sayfa çalışmaya devam ederken aynı saldırıların artık hiçbir şey döndürmediğini kanıtlıyorsun.
20 dk
Bu derste öğreneceklerin
- SQL enjeksiyonunun nasıl olduğunu açıklamak
- Hataya dayalı, mantıksal ve UNION enjeksiyonunu tanımak
- PHP kodunda dizgeyle kurulmuş sorguları bulmak
- Onları hazırlanmış ifadelerle düzeltmek (PDO prepare/execute)
- Kaçışlamanın ve engel listelerinin neden yetmediğini açıklamak
Temel terimler
- SQL
- Structured Query Language; ilişkisel veritabanlarında veriyi okumak ve değiştirmek için kullanılan dil.
- Enjeksiyon
- Güvenilmeyen girdinin bir yorumlayıcı tarafından kod ya da komut olarak yorumlanması: bir veritabanı, bir tarayıcı, bir kabuk.
- SQL enjeksiyonu (SQLi)
- Sorgu dizgeler birleştirilerek kurulduğu için bir veritabanı sorgusunun yapısını değiştiren girdi.
- UNION
- İkinci bir SELECT'in satırlarını birincinin sonuna ekleyen SQL anahtar sözcüğü.
- Hazırlanmış ifade
- Veritabanına yer tutucularla (?) gönderilen ve değerleri ayrı gönderilen sorgu; böylece değerler asla SQL olarak ayrıştırılmaz.
- En az ayrıcalık (veritabanı)
- Uygulamanın veritabanı hesabı yalnızca uygulamanın ihtiyaç duyduğunu yapabilir.
← Portlar ve soketler: veriyi hangi program alır · Tüm dersler · Yaygın saldırılar: oltalama, kötü amaçlı yazılım, parola saldırıları, hizmet reddi →