SQL Injection ve Çeşitleri

SQL injection aslına bakarsak yazılımcıların bilmesi gerektiği bir şey. Bundan dolayı bu başlık altında sizlere bilgiler sağlayacağız.
Öncelikle bir şeyden söz etmek istiyoruz. Bu içerikte sizlere nasıl SQL açığından sızılacağını anlatacağız. Tabii bunları anlatmamızın sebebi başka sitelere saldırı yapmanız değil. Amacımız kendi web sitenizi veya uygulamanızı daha iyi korumak. Bir yazılımcı, güvenlik açıklarını bildiği takdirde yazılım geliştirirken bu açıkların önüne geçer. Yani bir yazılım kodladıktan sonra güvenliğe önem gösterilmez ise o yazılım, pek çok zayıf noktaya sahip olur ve saldırıya açık hale gelir.
Başlıklar
SQL Injection
SQL enjeksiyonu, SQL uygulaması üzerinden kod enjekte etmek anlamına geliyor. SQL kullanan yazılımlarda bu açık ortaya çıkar. Örneğin web sitesinde MySQL olması veya uygulamada SQLite kullanılması duruma göre güvenlik açığı oluşturur. Bu açıklar sebebiyle bu zamana kadar büyük küçük pek çok şirket etkilenmiş durumda.
Bazı örnek olaylardan bahsedelim. Sıklıkla karşılaşılan saldırılardan birisi verilerin çalınması durumu. SQL üzerinde oluşan bir güvenlik açığı olan verilerin toplanması durumu ile pek çok haberde karşılaşılmış oluyor. Tabii her kişisel verilerin çalınması SQL açığı olmayabilir, farklı nedenlerle de oluşabilir. Özellikle şifreler MD5 gibi veya tuzlama gibi yöntemlerle korunmuyor ise bu karmaşık olan şifrelerin de çalınması anlamına geliyor.
SQL injection olayı, daha çok PHP ve ASP.NET kullanan web projelerinde görülür. Buna rağmen uygulamalarda da bu açığa rastlanabiliyor. MySQL, SQLite ve Microsoft SQL gibi pek çok uygulama, bu açığa yakalanabilir. Burada önemli olan nokta güçlü bir uygulama geliştirmek.
SQL Injection Yöntemleri
Pek çok enjekte olma yol bulunur. Yazılımcıların bilmesi gerektiği yöntemlerden birisi çıkış karakterleri ile oluşan açık. Bu açık, oldukça popüler ve özellikle amatör yazılımcılar arasında oldukça yaygın bir problem. Bu işe yeni başlamış olan biri kişinin aldığı saldırılarla kendini geliştirmesi mümkün. Bir insan deneyim yaşayarak kendini geliştirir. Yine de bunları erkenden bilmek ve doğacak sorunları engellemek gerekir.

Tırnak işareti, SQL injection arasında çok ciddi bir güvenlik açığı. Bu zayıf noktaya sahip bir sitedeki verileri ele geçirmek çok kolay olur. Örneğin tırnak işareti ile oluşan açık sayesinde veritabanında kullanıcı hesabının yetkisine bağlı olarak istenen veriler çekilebilir. Kullanıcı verileri de en basit yöntemle bu şekilde ele geçiriliyor.
Tırnak işaretleri ile oluşan pek çok açık bulunur. Bundan dolayı bu açıkları önlemenin yolu kullanıcılardan alınan verileri güvenli hale getirmek. Örneğin bir kullanıcı, mesaj bırakıyor olsun. Mesaj bıraktıktan sonra bu mesajın HTML etiketleri kaldırılmalı, tırnak işareti değiştirilmeli ve bunun gibi pek çok düzenleme yapılmalı. PHP’de “strip_tags, htmlspecialchars ve addslashes” gibi çeşitli fonksiyonlar var. Bu gibi fonksiyonlarla kod, güvenli hale gelir.
Bir kullanıcı, SQL injection alanında dosya yazdırma sorunu ile de karşılaşabiliyor. Dosya yazdırma sorunu aslına bakarsak tırnak işareti açığı ile oluşan bir durum. Yazılımcılar, her ne kadar güvenlik açıklarına önem gösteriyor olsa da bu açıklarla karşı karşıya kalabiliyor. Belki bu çözüm verileri çekmeyi önlemez fakat sistemde tam yetkiye sahip olmayı engeller. Bundan dolayı şifre gibi bazı verilerin şifrelenmesi gerekiyor.
Bu açıklara karşı alınması gereken önlem dosya yazdırma yetkisini kapatmak. Dosya yazdırma yetkisi, SQL üzerinden kötü amaçlı yazılım yollamayı sağlar. Bu yazılım üzerinden sisteme erişim sağlanır. Bu durumu engellemenin yolu “FILE” yetkisini kaldırmak. Kullanıcıdan kaldırılacak olan bu yetki, dosya yazdırmanın önüne geçer.