SQL eklemeyi açıklama
SQL ekleme, veri ihlalleri için kullanılan yaygın bir yöntemdir. Saldırı, özgün SQL betiğini bozmak ve eklenen SQL betiğini yürütmek amacıyla genellikle web sitesi aracılığıyla web veya uygulama ön ucundaki bir form alanına SQL komutu eklemeyi içerir. Bu durum genellikle istemci uygulaması içinde dinamik olarak oluşturulan SQL kullanıldığında oluşur. SQL ekleme saldırılarının birincil nedeni, hem istemci uygulamasında hem de veritabanı saklı yordamlarında kötü kodlama uygulamalarıdır. Birçok geliştirici daha iyi uygulamaları benimsese de SQL ekleme önlemeye öncelik tanımayan geliştiriciler tarafından oluşturulan eski uygulamaların ve daha yeni uygulamaların yaygınlığı nedeniyle SQL ekleme önemli bir sorun olmaya devam ediyor.
Örneğin, bir ön uç web uygulamasının aşağıdaki gibi dinamik bir SQL deyimi oluşturduğunu varsayalım:
SELECT * FROM Orders WHERE OrderId=25
Bu T-SQL, kullanıcı şirket web sitesinin satış siparişi geçmişi bölümüne gittiğinde ve sipariş kimliği numarası için form alanına 25 girdiğinde oluşturulur. Ancak, kullanıcının yalnızca bir kimlik numarasından daha fazlasını girdiğinizi varsayalım; örneğin, "25; SIPARIŞLERDEN SIL;"
Bu durumda, veritabanınıza gönderilen sorgu aşağıdaki gibi olacaktır:
SELECT * FROM Orders WHERE OrderID=25; DELETE FROM Orders;
Yukarıdaki örnekteki sorgunun çalışma şekli, SQL veritabanına deyimin sona erdiğini ve çalıştırılması gereken başka bir deyim olduğunu noktalı virgülle ";" ile anlatılmasıdır. Veritabanı daha sonra bir sonraki deyimi belirtildiği gibi işler ve bu da Orders tablosundaki tüm satırların silinmesine neden olur.
İlk SELECT sorgu, herhangi bir hata oluşturulmadan normal şekilde çalıştırılır. Ancak Siparişler tablosuna baktığınızda satır görmezsiniz. Toplu işteki tüm satırları silen ikinci sorgu da yürütüldü.
SQL ekleme saldırılarını önlemek için kullanılan tekniklerden biri, parametrelerin metnini veya form alanlarına girilen değerleri inceleyerek çeşitli anahtar sözcükleri aramaktır. Ancak, bu çözüm yalnızca bu saldırıların çalışmasını zorlamanın birçok, birçok yolu olduğundan en düşük korumayı sağlar. Bu ekleme tekniklerinden bazıları ikili verileri geçirmeyi, veritabanı altyapısının ikili verileri bir metin dizesine geri dönüştürmesini ve ardından dizeyi yürütmeyi içerir.
Bu senaryonun bir örneğini görmek için aşağıdaki T-SQL kodunu çalıştırabilirsiniz.
DECLARE @v VARCHAR(255)
SELECT @v = cast(0x73705F68656C706462 AS VARCHAR(255))
EXEC (@v)
İster müşteri ister çalışan olsun, bir kullanıcıdan veri kabul ederken, SQL ekleme saldırılarını önlemek için girişin beklenen veri türüyle eşleşip eşleşmediğini doğrulamak çok önemlidir. Bir sayı bekleniyorsa, istemci uygulaması girişin gerçekten bir sayı olduğunu doğrulamalıdır. Bir metin dizesi bekleniyorsa, doğru uzunlukta olduğundan ve herhangi bir ikili veri içermediğinden emin olun. İstemci uygulaması tüm kullanıcı girişini doğrulamalıdır. Doğrulama, kullanıcıya sorunu bildirerek ve düzeltmesine izin vererek veya veritabanına veya dosya sistemine komut gönderilmediğinden emin olmak için hatayı düzgün bir şekilde işleyerek yapılabilir.
Uygulama kodunuzun düzeltilmesi her zaman öncelikli olmalıdır ancak mümkün olmayan durumlar olabilir. Bu gibi durumlarda Gelişmiş Tehdit Koruması, hassas verileriniz için ek bir güvenlik katmanı sunabilir.