Professional Documents
Culture Documents
SQL Injection:
Web siteniz tehdit altında mı?
SQL Injection ad› verilen sald›r› yönteminden haberdar
m›s›n›z? Cevab›n›z olumsuz ise, Web siteleriniz ciddi
anlamda tehlikede olabilir.
B
u ay, Web sitelerini ciddi ölçüde tehdit eden SQL
Injection sald›r›lar›n› inceleyece¤iz. Bunun yan› s›-
ra, .NET programc›lar›n›n SQL Injection sald›r›la-
r›na karfl› ne gibi önlemler alabilece¤ini de hep
birlikte görece¤iz.
SQL Injection Nedir? fiekil 2: Kötü niyetli bir kullan›c›n›n SQL Injection ile yanl›fl çal›flmas›n›
sa¤lad›¤› ö¤eler…
Aram›zda Internet üzerinden düzenli bir flekilde al›flverifl ya-
pan kimse var m›? Pekala… fiimdi Web üzerinden maillerini K›saca; SQL Injection, Web siteleri üzerindeki formlara özel
kontrol edenleri görelim? Güzel… Ya bankac›l›k ifllemlerini In- bir tak›m SQL kodlar› girerek normal flartlarda yap›lmamas›
ternet üzerinden halledenler? gereken ifllemlerin yap›lmas›na verilen add›r.
Günümüzde Internet üzerinden yap›lan ifllemlerin büyük
bir k›sm›nda, ziyaret etti¤imiz siteye kendimizi tan›tmak için SQL Injection nas›l yap›l›yor?
bir kullan›c› ad› ve flifre girmemiz gerekir. “Kullan›c› Ad›” ve Bu genel aç›klaman›n ard›ndan, konuyu basit bir örnekle pe-
“fiifre” kutucuklar›na girmifl oldu¤umuz de¤erler Web sunu- kifltirmekte fayda var.
cusunda çal›flan bir program taraf›ndan kontrol edilir ve do¤- Örnek senaryomuzda, C# ile haz›rlanm›fl bir Web sayfas›-
rulama ifllemi sonucunda yetkimiz olan ifllemleri yapabilir n› inceleyece¤iz. Bu sayfa, üyelerimizin siteye girifl yapmas›-
hale geliriz. n› sa¤layan standart bir Login ekran› içerecek.
Peki ama, sahnenin arkas›nda neler olup bitiyor? Sunucu,
biz bilgilerimizi girdikten sonra bu bilgileri içeren bir SQL
cümleci¤i oluflturacak ve hesap bilgilerimizin kullan›c› veri-
taban›nda bulunup bulunmad›¤›n› kontrol edecektir.
uzun bir SQL komutunun yarataca¤› Oysa veriyi çekece¤imiz noktaya bir
tehlike daha büyük olacakt›r. Deminki try…catch blo¤u ekleyerek hatalar› yaka-
örne¤imizde, kullan›c› ad› ve flifre alan- lam›fl olsayd›k, karfl›laflaca¤›m›z görün-
lar›n› 8 karakterle s›n›rlamak iyi bir fikir tü çok farkl› olacakt›.
olacakt›r. Tutarl›l›¤› sa¤lamak ad›na, ay- // Veriyi çekelim
n› s›n›rland›rmay› yapman›z gereken iki data = new DataTable();
yer daha vard›r: Veritaban›ndaki users try
tablosu, ve kodun kendisi! sqlString de- {
¤iflkenindeki komutu oluflturdu¤umuz adap.Fill(data);
kodu flu flekilde yazd›¤›m›z› varsayal›m: }
// Komut sat›r›n› olufltural›m catch
sqlString = "SELECT * FROM { fiekil 6: Hatalar›m›z› kullan›c›larla paylaflmak
users WHERE username = '"; } zorunda de¤iliz…
sqlString += uname.Text.Subst- Bu flekilde, hata mesajlar›na ait ayr›n-
ring(0, 8); t›lar›n kullan›c›lar taraf›ndan görüntü- laka de¤ifltirilmifl olmal›d›r. SQL Ser-
sqlString += "' AND password lenmesinin önüne geçebiliriz. ver’›n “sa” hesab›, Oracle’›n “sys”, “sys-
= '"; Include dosyalar›, dikkat edilmesi ge- tem” ve “scott” hesaplar›, bu konunun
sqlString += pword.Text.Subst- reken bir di¤er noktad›r. Eski al›flkanl›k- belirgin örnekleridir.
ring(0, 8); lar› devam ettirerek dosyalar›m›za Veritaban›ndaki kritik bilgileri flifrele-
sqlString += "'"; “include.inc” gibi isimler verirsek, dos- yerek saklamak, al›nmas› gereken bir di-
yan›n ad›n› ö¤renen herhangi biri içeri- ¤er güvenlik önlemidir. Örne¤in; kredi
Art›k kötü niyetli kullan›c›lar kutula- ¤ini kolayca görüntüleyebilir. Bu tip kart› numaralar›n› “5888 4300 4565
ra ne yazarsa yazs›n, sunucu taraf›nda Include dosyalar›nda; veritaban› flifrele- 4565” gibi ç›plak bir flekilde saklamak,
gönderilen verinin sadece ilk 8 karakte-
rini dikkate al›yor olaca¤›z. Bu flekilde Eğer önemli bilgileri şifrelenmiş
güvenli¤imiz bir derece daha artm›fl ola-
cakt›r. Bunun yan› s›ra, Referrer Spoof ile olarak saklarsanız SQL Injection
Form Post etmek isteyebilecek kiflilerin
uzun SQL cümleleri göndermesini de yöntemiyle çalınması muhtemel
engellemifl oluruz.
.NET programc›lar›n› ilgilendiren bir
veriler çalanın işine yaramaz.
di¤er önemli nokta, hatalar›n yakalan-
mas›d›r. Yukar›da inceledi¤imiz örnekte; ri, tablo isimleri, SQL Server hesaplar› gi- tabloya s›zan bir kiflinin bütün numara-
siteye flu bilgilerle girildi¤ini varsayal›m: bi kritik bilgiler yer al›yor olabilir. Bu lar› ele geçirmesine ve bu numaralar›
Kullan›c› Ad› : neo yüzden yapmam›z gereken fley, söz ko- kullanarak gönlünce al›flverifl yapmas›-
fiifre :' nusu dosyalara sunucu taraf›nda derle- na izin vermek anlam›na gelir. Buna
nen dosya uzant›lar› atamam›zd›r. karfl›l›k, numaralar› sa¤lam bir algorit-
Tek bafl›na kullan›lan ' karakteri sor- Örne¤imizde ayn› dosyaya “include.asp” ma ile flifreleyerek “HK2omuDFf52ScK-
gumuzu bozaca¤› ve yanl›fl çal›flmas›na ad›n› verecek olursak, birileri dosyan›n dE223R” fleklinde saklayacak olursak,
yol açaca¤› için, Web sitemiz ayr›nt›l› bir ad›n› ö¤rense bile içeri¤ini Web üzerin- numaralar SQL Injection yöntemi ile ele
hata mesaj› verecektir. Bu hata mesaj›, den görüntülemesi o kadar kolay olma- geçirilse bile kimseye bir fley ifade etme-
kötü niyetli ziyaretçimizin siteyi daha yacakt›r. “.asp” uzant›l› dosyalar yecektir.
fazla zorlamas›n› sa¤layacak son derece istemciye derlenerek gönderildi¤i için,
kritik bilgiler içeriyor olabilir. kötü niyetli ziyaretçimizin görebilece¤i Sonuç
tek fley, üretilmifl bir tak›m HTML kod- Bu yaz›da, SQL Injection sald›r›lar›n› ve
lar› olacakt›r. .NET programc›lar›n›n alabilece¤i temel
fiimdiye kadar hep iflin kodlama k›s- güvenlik önlemlerini incelemifl olduk.
m›ndan bahsettik. Ne var ki, veritaban› SQL Injection sald›r›lar›n›n bütün var-
taraf›nda almam›z gereken önlemler de yasyonlar›n› ve al›nabilecek güvenlik
var. Bu önlemlerin en önemlisi, kullan›- önlemlerinin tamam›n› tek bir makale-
c›lar ve yetkilendirme konusudur. Siteni- ye s›¤d›rmak ne yaz›k ki mümkün de¤il.
zin arkas›nda SQL Server veya Oracle Buna karfl›l›k, iflin temel mant›¤›n› ve püf
gibi bir RDBMS çal›fl›yorsa, Web üzerin- noktalar›n› herkesin anlad›¤›n› tahmin
den yürütülecek sorgularda kullanaca¤›z ediyorum. .NET d›fl›ndaki platformlarda
veritaban› hesab›n›n yetkilerini müm- uygulama gelifltirenler, yaz›da dile getir-
fiekil 5: Sitelerin standart hata mesajlar›, kün oldu¤u kadar s›n›rland›rmal›s›n›z. di¤im fikirleri kendi platformlar›na
kötü niyetli ziyaretçiler için hazine de¤erinde Bunun yan› s›ra, veritaban› yüklendi¤in- adapte ederek kolayca hayata geçirebilir-
olabilir… de haz›r gelen hesaplara ait flifreler mut- ler.