İçeriğe geç
parazade

SQL Enjeksiyonu Nedir?

İngilizce: SQL Injection

Yayın: · Son güncelleme:

SQL Enjeksiyonu Nedir? Kısaca

SQL enjeksiyonu (SQL injection), bir web uygulamasının kullanıcıdan aldığı veriyi denetlemeden veritabanı sorgusuna eklemesi sonucu saldırganın veritabanında izinsiz sorgu çalıştırabildiği bir güvenlik açığıdır.

SQL Enjeksiyonu nedir?
İçindekiler
  1. SQL enjeksiyonu nedir?
  2. Neden tehlikelidir?
  3. Geliştiriciler nasıl önler?
  4. Site sahipleri ne yapmalı?

SQL enjeksiyonu nedir?

SQL, web sitelerinin veritabanlarıyla konuşmak için kullandığı dildir. Giriş formu, arama kutusu ya da ürün sayfası arka planda bir SQL sorgusu çalıştırır. SQL enjeksiyonu, uygulamanın kullanıcıdan gelen metni güvenli biçimde işlemeden bu sorguya doğrudan eklemesiyle ortaya çıkar. Bu durumda kullanıcı girdisi, veri olarak değil komut olarak yorumlanabilir.

Bu açık, OWASP Top 10 listesinde "enjeksiyon" başlığı altında yıllardır yer alan en bilinen web zafiyetlerinden biridir.

Neden tehlikelidir?

Başarılı bir SQL enjeksiyonu saldırganın veritabanındaki bilgileri okumasına, değiştirmesine ya da silmesine yol açabilir. Müşteri adları, e-posta adresleri, şifre özetleri ve sipariş bilgileri risk altına girer. Bazı durumlarda giriş ekranı şifre olmadan aşılabilir.

Örneğin küçük bir online mağazanın arama kutusunun bu açığı taşıdığını düşünün. Açık kullanıldığında binlerce müşterinin iletişim bilgileri dışarı çıkabilir. Mağaza hem müşterilerini bilgilendirmek hem de kişisel veri ihlali yükümlülüklerini yerine getirmek zorunda kalır.

Geliştiriciler nasıl önler?

En etkili yöntem, parametreli sorgular (hazır ifadeler) kullanmaktır. Bu yaklaşımda sorgunun yapısı ile kullanıcı verisi birbirinden ayrı gönderilir ve veritabanı girdiyi hiçbir zaman komut olarak çalıştırmaz. Diğer önlemler şunlardır:

  • Güvenilir bir ORM ya da veritabanı kütüphanesi kullanmak
  • Uygulamanın veritabanı hesabına yalnız gereken yetkileri vermek
  • Girdi doğrulama ve web uygulama güvenlik duvarıyla ek katman eklemek

Site sahipleri ne yapmalı?

Hazır bir site altyapısı kullanıyorsanız çekirdek yazılımı ve eklentileri güncel tutun. Özel yazılım yaptırıyorsanız geliştiriciden parametreli sorgu kullanıldığına dair güvence isteyin ve yayın öncesi bir güvenlik testi yaptırın.

Sıkça Sorulan Sorular

SQL enjeksiyonu hâlâ yaygın mı?

Modern yazılım çerçeveleri riski azaltmış olsa da eski ya da özensiz yazılmış uygulamalarda hâlâ görülür. Bu yüzden güvenlik testlerinde ilk kontrol edilen açıklardan biridir.

SQL enjeksiyonunu önlemenin en iyi yolu nedir?

Parametreli sorgular kullanmaktır. Kullanıcı verisi sorgudan ayrı gönderildiğinde veritabanı onu komut olarak yorumlamaz.

İlgili terimler

XSS(Cross-Site Scripting)XSS (Cross-Site Scripting), saldırganın bir web sitesine zararlı betik yerleştirip bu betiği başka kullanıcıların tarayıcısında çalıştırmasına yol açan bir web güvenlik açığıdır. Oturum çalma ve sahte form gösterme için kullanılır.OWASP Top 10OWASP Top 10, web uygulamalarındaki en kritik güvenlik risk kategorilerini veri ve topluluk görüşüne dayanarak sıralayan, OWASP'ın birkaç yılda bir güncellediği farkındalık belgesidir.Güvenli Kodlama(Secure Coding)Güvenli kodlama, yazılımı geliştirirken enjeksiyon, yetki hatası ve veri sızıntısı gibi güvenlik açıklarının oluşmasını baştan önleyen yazım alışkanlıkları ve ilkeler bütünüdür.Web Uygulama Güvenlik Duvarı(Web Application Firewall)Web uygulama güvenlik duvarı (WAF), bir web sitesine ya da web uygulamasına gelen HTTP isteklerini inceleyerek SQL enjeksiyonu, XSS ve kötü niyetli bot trafiği gibi saldırıları uygulamaya ulaşmadan engelleyen güvenlik katmanıdır.Veritabanı(Database)Veritabanı, verilerin düzenli, aranabilir ve güncellenebilir biçimde saklandığı elektronik kayıt sistemidir. Müşteri listeleri, siparişler ve ürün bilgileri gibi veriler veritabanlarında tutulur.Yazılım(Software)Yazılım, bir bilgisayarın ya da akıllı cihazın ne yapacağını adım adım tarif eden programların, verilerin ve talimatların bütünüdür. Donanım fiziksel parçaları, yazılım ise bu parçaları çalıştıran mantığı ifade eder.Sorgu(Query)Sorgu (query), bir veritabanından belirli verileri getirmek, yeni veri eklemek, mevcut veriyi güncellemek ya da silmek için gönderilen komuttur. İlişkisel veritabanlarında sorgular genellikle SQL diliyle yazılır.