
SQL Injection nedir?
Bir web uygulamasına veri girişi yaparken saldırganın kötü niyetli veriler göndererek veri tabanına erişim elde ettiği bir saldırı yöntemidir. SQL injection saldırıları, web uygulamalarının veri tabanı arka planında SQL sorguları kullanması nedeniyle mümkün olur. Saldırgan, kötü niyetli SQL kodları göndererek, uygulamanın veri tabanında yürüttüğü SQL sorgularına müdahale edebilir.
Yöntemleri şunlardır:
- Union Injection: Bu yöntem, bir veya daha fazla SQL sorgusunun sonuçlarını birleştirerek bir sonuç kümesi döndürmek için kullanılır. Örnek:
SELECT * FROM Products WHERE Name LIKE ‘%keyword%’
UNION SELECT column_name FROM information_schema.columns;
- Boolean Injection: Bu yöntem, bir SQL sorgusunun sonucunu doğru veya yanlış bir ifade olarak değiştirerek çalıştırmak için kullanılır. Örnek:
SELECT * FROM Users WHERE username=’username’ AND password=md5(‘password’) OR 1=1;
- Error-based Injection: Bu yöntem, SQL sorgusunda bir hata oluşturarak uygulamanın hata mesajlarında veritabanı bilgilerini ortaya çıkarmak için kullanılır. Örnek:
SELECT * FROM Products WHERE category=’books’ AND (SELECT COUNT() FROM (SELECT 1 UNION SELECT null UNION SELECT !1)x GROUP BY CONCAT((SELECT @@version),FLOOR(RAND(0)2)) )>0;
- Time-based Injection: Bu yöntem, uygulamanın yanıt süresini kullanarak veritabanından bilgi çıkarmak için kullanılır. Örnek:
SELECT * FROM Users WHERE username = ‘admin’ AND password = ‘password’ UNION SELECT 1,2,3,4,5,6,7,8,9,10 FROM sleep(10)
- Out-of-Band Injection: Bu yöntem, ayrı bir kanal kullanarak veritabanından bilgi almak için kullanılır. Örneğin, saldırganın kontrolünde olan bir sunucuya veri göndererek. Örnek:
SELECT name FROM users WHERE username = ‘admin’ OR 1=1;
- Double Query Injection: Bu yöntem, bir SQL sorgusunu iki parçaya bölmek ve her bir parçayı ayrı ayrı çalıştırmak için kullanılır. Örnek:
SELECT * FROM Users WHERE username = ‘admin’; UPDATE Users SET password = ‘newpassword’ WHERE username = ‘admin’;
Bu yöntemlerin her biri, SQL saldırılarında farklı şekillerde kullanılabilir. Ancak, bir web uygulamasının SQL saldırılarına karşı korunması için, giriş verilerinin doğrulanması ve sorguların parametreli hale getirilmesi gereklidir.
SQL injection saldırılarından korunmak için bazı önlemler şunlardır:
- Girdi doğrulaması: Kullanıcı girdileri doğrulanmalıdır. Sadece beklenen girdiler kabul edilmeli ve diğer girdiler reddedilmelidir. Bu, özellikle metin kutuları, parola alanları ve e-posta adresleri gibi alanlar için önemlidir.
- Parametreli sorgular kullanma: Parametreli sorgular kullanarak SQL Injection saldırılarını önlemek mümkündür. Parametreli sorgular, veritabanına gönderilen verileri, doğrudan SQL koduna dahil etmek yerine, ayrı bir parametre olarak belirler.
- Kısıtlamaları kullanma: Kısıtlamalar, veri türleri ve alan uzunlukları gibi sınırlamaları uygular. Bu, kullanıcının gönderebileceği veri miktarını ve türünü kontrol eder.
- Güncellemeleri yapma: Veritabanı yazılımı, sunucu işletim sistemi ve uygulama yazılımının güncellemeleri yapılmalıdır. Bu güncellemeler, SQL Injection saldırılarına karşı koruma sağlayan yeni özellikler içerebilir.
- İzinlerin kontrol edilmesi: Veritabanı işlemleri için minimum izinler verilmelidir. Bu, saldırganların veritabanında istenmeyen değişiklikler yapmalarını önleyebilir.
- Güvenli kodlama teknikleri: Kodlama teknikleri, SQL Injection saldırılarından korunmak için kullanılacak bazı teknikler içermelidir. Örneğin, kullanıcı girişlerinde tek tırnak işareti kullanılmamalı, SQL sorguları dinamik olarak oluşturulmamalı ve veriler doğrudan kullanıcılardan alınmamalıdır.
Bu önlemler, SQL Injection saldırılarını önlemede yardımcı olabilir. Ancak, herhangi bir web uygulamasının tamamen güvende olduğunu söylemek yanıltıcı olabilir. Bu nedenle, web uygulamalarının güvenliği düzenli olarak kontrol edilmeli ve güncellenmelidir.
Yine de daha detaylı bilgi almak isterseniz W3School’da şu makaleye göz atabilirsiniz: Beni oraya götür.