SQL Enjeksiyonu: Nedir, nasıl çalışır, örnekler ve verilerinizi korumaya yönelik ipuçları

Son Güncelleme: 30 Nisan 2025
  • SQL enjeksiyonu, veritabanlarına ve web sitelerine yönelik en yaygın tehditlerden biridir ve saldırganların hassas bilgileri manipüle etmesine, çalmasına ve hatta yok etmesine olanak tanır.
  • SQL enjeksiyon saldırılarının bant içi, kör ve hatta bant dışı olmak üzere birkaç türü vardır ve her biri kendine özgü özelliklere ve risklere sahiptir.
  • Bu tür saldırıların önlenmesinde girdi doğrulamasının uygulanması, hazırlanmış ifadelerin kullanılması ve yazılımın güncel tutulması önemlidir.

SQL enjeksiyon koruması

SQL enjeksiyonu, onlarca yıl önce tespit edilmiş olmasına rağmen hem işletmeler hem de bireysel kullanıcılar için hâlâ baş ağrısı yaratmaya devam eden siber tehditlerden biridir. Bir saldırganın sadece birkaç satır kodla tüm bir veritabanının kontrolünü ele geçirebileceği fikri bile, özellikle günümüzün birbirine bağlı dijital dünyasında, bizi alarma geçirmelidir.

Bu kılavuzda, SQL enjeksiyonunun nasıl çalıştığını, farklı saldırı türlerini, somut örnekleri ve en önemlisi, verilerimizi ve sistemlerimizi bu yaygın güvenlik açığına karşı nasıl koruyabileceğimizi ayrıntılı olarak ele alacağız. Sistemlerimizi koruyarak, ciddi sonuçlardan kaçınabilir ve bilgi güvenliğini sağlayabiliriz. Web sitenizin güvenliğini sağlam bir şekilde sağlamak veya bu kavramın neden bu kadar önemli olduğunu anlamak istiyorsanız, okumaya devam edin.

SQL Injection nedir ve neden hala bir risktir?

SQL enjeksiyonu (SQLi), formlar, URL'ler, çerezler veya diğer harici veri kaynakları gibi kullanıcılar için tasarlanmış girdileri kullanan bir web uygulaması tarafından yapılan veritabanı sorgularına kötü amaçlı kod enjekte etmeyi içerir. Bu teknik, saldırganın veritabanının işleyişini manipüle etmesine, gizli bilgileri çıkarmasına, kayıtları değiştirmesine veya hatta yok etmesine olanak tanır.

SQL terimi , ilişkisel veritabanlarına erişmek ve bunları işlemek için kullanılan evrensel bir dil olan Yapılandırılmış Sorgu Dili'ni ifade eder. Dinamik verilere sahip herhangi bir modern web sitesi, çevrimiçi mağaza, forum, blog veya uygulama, bilgileri depolamak ve almak için bir noktada SQL kullanır.

Bu sorun neden devam ediyor? Güvenli geliştirme teknikleri gelişmiş olsa da, gerçek şu ki, özellikle küçük işletmelerde veya yeterince güncellenmemiş web sitelerinde dolaşan yazılımların çoğu hala güvenlik açıkları içeriyor. Aslında, 2022 yılında CVE veritabanına binden fazla yeni SQL enjeksiyon güvenlik açığı eklendi; bu da riskin hayali olmaktan çok uzak olduğunu gösteriyor.

SQL enjeksiyon saldırısı nasıl çalışır?

Bu saldırının dinamikleri göründüğünden daha basit. Kullanıcının bir isim ve şifre girdiği bir giriş formunuz olduğunu varsayalım. Uygulama dahili olarak şu şekilde bir sorgu oluşturur:

SELECT * FROM users WHERE username = 'usuario' AND password = 'contraseña';

Geliştirici girdiyi düzgün bir şekilde doğrulamazsa, bir saldırgan kullanıcı alanına aşağıdakileri yazabilir:

admin'; --

Sonuç olarak sorgu şu hale gelir:

SELECT * FROM users WHERE username = 'admin'; --' AND password = 'loquesea';

SQL'de çift tire ( — ) bir yorumun başlangıcını gösterir. Bundan sonra gelen her şey göz ardı edilir, bu nedenle parola doğrulaması kaybolur ve "admin" yazarak giriş geçerli hale gelir, bu da saldırgana tam erişim sağlar. Olasılıklar daha da fazladır: veritabanlarını silmek, gizli bilgileri listelemek veya sunucuda komut çalıştırmak.

Sıfırdan SQL
İlgili makale:
Sıfırdan SQL: Veritabanlarındaki başlangıç ​​noktanız

SQL enjeksiyonunun ana türleri

SQLi güvenlik açıkları, saldırganın etkilenen sistemle nasıl etkileşime girdiğine göre sınıflandırılabilir:

1. Bant İçi SQL Enjeksiyonu

En doğrudan ve en kolay yararlanılabilen yöntemdir. Saldırgan saldırıyı başlatmak ve sonuçları almak için aynı kanalı kullanır. Bant içi enjeksiyonlar arasında şunlar öne çıkıyor:

  • Hatalara dayanarak: Saldırgan, veritabanının iç yapısı (tablolar, sütunlar vb.) hakkında ipuçları sağlayan hata mesajlarını görüntülemeye zorlar.
  • Birliğe dayalı olarak: SQL operatöründen faydalanın BİRLİĞİ meşru sorgu sonuçlarını diğer tablolardan çıkarmak istediğiniz verilerle birleştirmek için.

2. Çıkarımsal veya Kör SQL Enjeksiyonu

Bu versiyonda saldırgan hata mesajları veya doğrudan sonuçlar almaz, ancak sunucu yanıtındaki değişiklikler aracılığıyla davranışı çıkarabilir. İki alt tip ayırt edilir:

  • Boole tabanlı: “1=1” veya “1=2” gibi koşullar, doğru veya yanlış olmalarına göre web sitesinin farklı davranıp davranmadığını gözlemlemek için sorgularda kullanılır.
  • Zamana dayalı: Yanıtta gecikme yaratan işlevler kullanılır, örneğin: UYUMAK() MySQL'de. Eğer gecikme tespit edilirse saldırgan talimatının yerine getirildiğini bilir.
  VPN nedir ve ne işe yarar: VPN kullanmak için 10 neden

3. Bant Dışı SQL Enjeksiyonu

Bant dışı saldırılarda iletişim alternatif kanallar üzerinden gerçekleştirilir; örneğin veritabanından saldırganın kontrolündeki bir sunucuya HTTP veya DNS isteği yapması istenir. Bu teknik, konvansiyonel yolların tıkanması veya izlenmesi durumunda kullanılır.

MySQL sorgu örnekleri
İlgili makale:
MySQL sorguları ve örnekleri

SQL enjeksiyonu için ortak giriş yolları

SQL enjeksiyonları genellikle kullanıcının web sitesine bilgi gönderdiği herhangi bir noktayı istismar eder:

  • Kayıt, giriş, yorum veya arama formları: Daha sonra bir sorguda kullanılacak verilerin yazıldığı herhangi bir alan.
  • GET parametreli URL'ler: Birçok uygulama, herhangi bir ön kontrol olmaksızın web adresindeki parametrelerden doğrudan SQL sorgularına veri ekler.
  • Çerezler: Bazı uygulamalar tarayıcı çerezlerinin içeriğini işleyerek bunları veri tabanıyla etkileşime girmek için kullanırlar, bu da başka bir olası yol açar.
  • Sunucu değişkenleri: Bazı durumlarda uygulamalar HTTP başlıkları aracılığıyla değiştirilebilen sunucu değişkenlerini filtrelemez.

SQL enjeksiyon saldırılarının pratik örnekleri

Tehdidin ciddiyetini ve neden varlığını sürdürdüğünü anlamak için şu açık örnekleri görmekten daha iyi bir şey yoktur:

  • Verileri ayıklayın: Bir saldırgan bir alana ' OR '1'='1 girerse, sorgu veritabanındaki tüm kayıtları döndürecek ve kişisel bilgiler, parolalar veya özel bilgilerin elde edilmesine olanak tanıyacaktır.
  • Tabloları sil: Gibi teknikler aracılığıyla nombre'; DROP TABLE usuarios; --saldırgan tüm tabloların silinmesine neden olur ve telafisi mümkün olmayan hasara yol açar.
  • Yetkisiz Erişim: Kimlik doğrulama alanlarını istismar ederek saldırgan, parolayı bilmeden hesaplara erişiyor ve ayrıcalıkları yönetici düzeyine çıkarıyor.
  • Kurabiye zehirlenmesi: Web sitesi çerezlerin içeriğini doğrulamıyorsa, saldırgan çerezleri SQL ifadeleri ekleyecek şekilde değiştirebilir ve bu şekilde verilere erişmek veya bunları değiştirmek gibi çeşitli amaçlara ulaşabilir.

SQL enjeksiyon saldırısının ne gibi sonuçları olabilir?

SQLi'nin etkileri hem kişisel hem de profesyonel açıdan yıkıcı olabilir. Olası zararlar şunlardır:

  • Gizli bilgilerin kaybı: Müşterilerinizin verileri, geçmişi, e-postaları, telefon numaraları veya kredi kartları yanlış ellere düşebilir.
  • Kimlik hırsızlığı: Çalınan veritabanı bilgilerini kullanarak müşterileri taklit etmek, mali dolandırıcılık yapmak veya para sızdırmak.
  • Sabotaj ve veri imhası: Bir saldırgan tabloları düşürebilir, kayıtları değiştirebilir veya kritik uygulamaları felç edebilir.
  • İtibar kaybı ve hukuki yaptırımlar: Veri ihlalleri müşterilerin ve iş ortaklarının güvenini ciddi şekilde etkiler ve GDPR veya LOPDGDD gibi yasalar kapsamında para cezalarına yol açabilir.
  • Ekonomik maliyetler: Yapılan araştırmalar, SQL enjeksiyonundan sonra bir sistemi geri yüklemenin, kaybedilen iş veya tazminatlar hariç, yüz binlerce avroya mal olabileceğini gösteriyor.

Ünlü SQLi saldırılarının gerçek örnekleri

Çok sayıda şirket ve platform SQL enjeksiyonlarının kurbanı oldu. Bu saldırıların kapsamını ve tehlikesini ortaya koyan bazı örnekler:

  • 2019'da Fortnite: Popüler çevrimiçi video oyununda saldırganların kullanıcı hesaplarına ve kişisel verilere erişmesine olanak tanıyan bir SQL açığı ortaya çıktı.
  • Cisco'nun 2018'deki performansı: Lisans yönetim sistemindeki bir zayıflık, saldırganların yönetici ayrıcalıklarıyla komut yürütmesine olanak sağladı.
  • Tesla'nın 2014'teki hali: Güvenlik araştırmacıları, web sitesinde bulunan bir SQL açığından yararlanarak kullanıcı verilerinin çalınmasının ve yetkilerin artırılmasının mümkün olduğunu gösterdi.

Bu zaafiyetin içine düşmek neden bu kadar yaygın?

SQL enjeksiyonunun en büyük sorunu, yürütülmesinin kolay olması ve ne kadar basit olursa olsun birçok web uygulamasının, düzgün bir şekilde programlanmadığı ve bakımı yapılmadığı takdirde bu güvenlik açığına karşı savunmasız olabilmesidir. En sık görülen nedenler arasında şunlar yer alır:

  • Kullanıcı girişi doğrulamasının eksikliği: Herhangi bir şeyin filtrelenmeden veritabanına erişmesine izin vermek, saldırganlara kapı açar.
  • SQL sorgularının dinamik yapısı: Kullanıcı tarafından sağlanan değişkenleri kontrol uygulamadan doğrudan sorgu oluşturmak için birleştirirsek sonuç felaket olabilir.
  • Güncel olmayan veya yama yapılmamış yazılım kullanımı: CMS'nizi, eklentilerinizi, çerçevelerinizi veya veritabanı yöneticinizi güncel tutmamak da bir diğer risk faktörüdür.
  • Veritabanlarının gereksiz yere internete açılması: Sadece iç ağlardan erişilebilen SQL sunucularını açık bırakmak, siber suçlular için işleri çok daha kolaylaştırıyor.
  VPN'ler ve HTTPS'siz web siteleri: Korumanız ne kadar geniş bir alanı kapsıyor?

SQL Enjeksiyonu Nasıl Önlenir: Önerilen Teknikler ve En İyi Uygulamalar

İyi haber şu ki, web sitenizi veya uygulamanızı SQL enjeksiyonuna karşı korumak için çok sayıda yöntem mevcut. En iyi uygulamaları uygulayarak riskleri önemli ölçüde azaltabilirsiniz.

1. Tüm girdilerin titizlikle doğrulanması

Kullanıcıdan alınan herhangi bir veriyi (formdan, parametreden, HTTP başlığından, çerezlerden vb.) işlemeden önce, verinin türünü, uzunluğunu, biçimini ve izin verilen değerlerini kontrol etmek zorunludur . Örneğin, bir alanın sayısal olması gerekiyorsa, diğer tüm değerleri otomatik olarak reddetmelisiniz.

2. Hazırlanmış ifadeleri ve parametreli sorguları kullanma

Hazırlanmış ifadeler, verileri SQL kodundan ayırmanıza olanak tanır . Yer tutucular (?) veya değişkenler ekleyerek, kötü amaçlı kodun sorgunun bir parçası olarak yorumlanmasını önlerler. Bu yöntem, SQL enjeksiyonunu önlemenin en etkili yöntemlerinden biridir.

PHP ve MySQLi'de basit bir örnek:

$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $user, $pass);
$stmt->execute();

3. Özel karakterlerden kaçın

Parametreli sorguların kullanılması mümkün olmadığında, SQL'de özel anlamı olan karakterleri (tırnak işaretleri, noktalı virgüller, tireler vb.) dile veya geliştirme çerçevesine özgü fonksiyonlar kullanarak manuel olarak kaçırmak hayati önem taşır. Ancak, bu teknik doğru uygulanmadığı takdirde boşluklar bırakabilir , bu nedenle tek savunma yöntemi olmamalıdır.

4. Kullanıcıdan ayrıntıları ve hata mesajlarını gizleyin

SQL hata mesajlarını asla kullanıcıya göstermeyin, çünkü bu mesajlar veritabanı yapısı hakkında ipuçları verebilir. Genel mesajlar gösterin ve teknik ayrıntıları teknik ekip tarafından analiz edilmek üzere dahili günlüklerde saklayın.

5. Veritabanı kullanıcısının ayrıcalıklarını sınırlayın

Web sitesini veritabanına bağlamak için asla 'root' kullanıcısını kullanmayın. Minimum gerekli izinlere sahip ( yalnızca okuma, gerektiğinde yalnızca değiştirme ) özel bir kullanıcı oluşturun. Bu şekilde, bir hata olsa bile, hasar daha az olacaktır.

6. Yazılımınızı, eklentilerinizi ve çerçevelerinizi güncel tutun

Güncellemeler genellikle güvenlik açıklarını giderir. Yama ve sürümlerle güncel kalmak, sorunlardan kaçınmanın en iyi yollarından biridir, çünkü saldırganlar genellikle yeni keşfedilen ve yamalanmamış güvenlik açıklarından yararlanır.

7. Web uygulama güvenlik duvarlarını (WAF'ler) kullanın

Web uygulama güvenlik duvarları, web sitenize gelen trafiği gerçek zamanlı olarak analiz eder ve SQL enjeksiyonu ve diğer saldırı türlerinin şüpheli veya bilinen kalıplarını engeller.

Bilgisayar Güvenliği
İlgili makale:
Bilgisayar Güvenliğinin Önemi: Bilgilerinizi Güvende Tutmak

SQLi güvenlik açıklarını kontrol etmek için yararlı araçlar ve kaynaklar

Güvenlik tek seferlik bir iş değildir. Uygulamalardaki potansiyel güvenlik açıklarını belirleyebilen otomatik araçlar mevcuttur, örneğin:

  • SQLMap: SQL enjeksiyonu açıklarını tespit edip bunlardan faydalanmanıza ve bunları başkalarından önce kapatmanıza yardımcı olan açık kaynaklı bir araç.
  • WPS tarama: WordPress konusunda uzmanlaşmış olup, ekosistemin risk altında olabilecek eklentilerini, temalarını veya diğer parçalarını belirlemenize olanak tanır.

Belirli Sistemlerde ve Uygulamalarda SQL Enjeksiyonu: WordPress ve Ötesi

Dünyanın en popüler içerik yönetim sistemi (CMS) olan WordPress, temel SQL enjeksiyon korumasını güçlendiriyor. Ancak, üçüncü taraf eklentiler ve temalar potansiyel bir güvenlik açığı kaynağı olmaya devam ediyor. Yalnızca aktif ve güncel bileşenlerin kullanılması ve veritabanıyla güvenli bir şekilde etkileşim kurmak için wpdb->prepare() gibi yerel WordPress işlevlerinden yararlanılması önerilir.

Diğer özel uygulamalar, çevrimiçi mağazalar, forumlar ve ev sistemleri, en iyi uygulamalar izlenmediği takdirde özellikle savunmasız olabilir. Güncel bir yazılım envanteri tutmak ve düzenli denetimler yapmak, riski en aza indirmek için çok önemlidir.

Yasal yönleri: SQL enjeksiyonunu istismar etmek yasa dışı mıdır?

SQL enjeksiyon saldırısı gerçekleştirmek her zaman yasa dışıdır , çünkü bilgiye veya kaynaklara yetkisiz erişimi içerir. Belirli yasalar farklılık gösterebilir, ancak İspanya'da, diğer Batı ülkelerinde olduğu gibi, saldırıya uğrayan sistem güvensiz olsa bile, başkasının verilerine erişen, bunları değiştiren veya silen herkes ağır şekilde cezalandırılır. Kötüye kullanım cezai yaptırımlara yol açabilir.

SQLi'ye kapı açan yaygın hatalar

En yaygın gözden kaçan olayların incelenmesi, mevcut bilgi zenginliğine rağmen bu olayların neden meydana gelmeye devam ettiğini açıklamaya yardımcı olur. Tipik hatalar şunlardır:

  • Girişleri filtrelemeden genel formlardan çıkınÖzellikle yorumlarda, aramalarda veya iletişim bölümlerinde.
  • Güvenli olmayan kodun yeniden kullanılması güvenliği dikkate almayan eski örneklerden veya eğitimlerden.
  • Dahili sistemlerin dışarıdan erişilebilir olmasına izin verin sıkı kimlik doğrulama kontrolleri ve IP filtrelemesi olmadan.
  • Periyodik güvenlik testlerinin gerçekleştirilmemesi kod değişiklikleri veya güncellemelerden sonra.
  Kendini Çoğaltan Virüsler: Creeper'dan Yapay Zekaya

Bir SQL enjeksiyonunun ekonomik ve itibar maliyeti

Teknik hasarın ötesinde, bir SQL ihlali milyonlarca dolarlık kayba neden olabilir. ABD Donanması gibi şirketler büyük kesintiler yaşadı; kritik hizmetler aylarca kapalı kaldı veya engellendi, tek bir olayda müdahale ve kurtarma maliyetleri yarım milyon doları aştı.

Ayrıca itibar kaybı uzun süreli olabilir; Ciddi bir olaydan sonra müşterilerin ve kullanıcıların güvenini yeniden kazanmak zorlu bir görev olabilir, olası yasal işlemlerden bahsetmeye bile gerek yok.

Web sitemin tehlikede olduğunu nasıl anlarım? SQLi saldırısının belirtileri ve semptomları

Bazen bir saldırı fark edilmeden gerçekleşebilse de, bir web sitesinin tehlikeye atıldığının veya atılmakta olduğunun uyarı işaretleri vardır:

  • Şüpheli isteklerde ani artış veya anormal trafik.
  • Kullanıcı tarafından görülebilen SQL hata mesajlarıÖzellikle formlara garip veriler girerken.
  • Beklenmeyen yönlendirmeler veya açılır pencereler ve bilinmeyen bayraklar.
  • Veritabanında beklenmeyen değişiklikler (silinmiş, değiştirilmiş kayıtlar, kontrolsüz yeni hesaplar).

Bir SQLi saldırısına uğradığınızı tespit ederseniz veya bundan şüphelenirseniz ne yapmalısınız?

Hızlı hareket etmek çok önemlidir. Potansiyel bir saldırının belirtilerini tespit ederseniz, hasarı azaltmak ve güvenliği yeniden sağlamak için şu adımları izleyin:

  • Etkilenen web sitesini veya işlevselliği geçici olarak kapatın daha fazla zararı önlemek için.
  • Barındırma sağlayıcınızı ve güvenlik görevlinizi bilgilendirin Şirketi.
  • AEPD'yi ve etkilenen kullanıcıları bilgilendirin Kişisel verilerin sızdırılması halinde hukuka uygun hareket edilmesi.
  • Önceki, temiz bir yedeklemeyi geri yükleyin ve ihlali belirlemek için günlükleri ve kayıtları inceleyin.
  • Bir güvenlik denetim süreci başlatın Gelecekteki olayların önlenmesi için.

Eğitim ve öğretimin rolü

Sadece yama yüklemek veya güvenlik eklentileri kurmak yeterli değil. BT ekipleri ve kullanıcılar için sürekli eğitim, bu ve diğer siber saldırı türlerine karşı en iyi savunmadır. Konuşmalar düzenlemek, son güvenlik açıkları hakkında uyarılar içeren bültenler göndermek ve herkesin en iyi uygulamalara aşina olmasını sağlamak uzun vadede büyük fark yaratır.

Güvende kalmak için temel fikirler

SQL enjeksiyonu, gerekli önlemler alınmadığı takdirde veri ve sistem bütünlüğünü tehlikeye atabilecek sık karşılaşılan bir tehdit olmaya devam etmektedir . Tüm girdileri kontrol etmek, modern koruma tekniklerini kullanmak ve yazılımları güncel tutmak, önleme için en iyi stratejilerdir. Güvenliğe yatırım yapmak yalnızca finansal kayıpları önlemekle kalmaz, aynı zamanda itibarınızı ve kullanıcılarınızın güvenini de korur.

Bilgi bütünlüğü
İlgili makale:
Bilgisayar güvenliğinde bilgi bütünlüğü