İçeriğe geçin

SQL enjeksiyonu

SQL enjeksiyonu, dışarıdan gelen verinin veritabanı sorgusunun yapısını değiştirmesidir. Parametre bağlamak değerleri işler; erişim yetkisini belirlemez.

Bilgi güvenliği

SQL enjeksiyonu, uygulamanın işlediği veriler üzerinden SQL komut parçalarının sorguya sokulmasıdır. Böyle değerler sorgu metnine eklenirse sorgunun anlamını değiştirebilir. Hangi verilerin okunabileceği veya değiştirilebileceği, kullanılan veritabanı hesabının yetkilerine de bağlıdır.

Proje filtresiyle sorgu yapısını ayırmak

Kurgusal bir destek talebi portalı proje referansına ait kayıtları arar. projectRef alanındaki değeri bağlı sorgu parametresi olarak işler: Sorgunun yapısı sabittir, değer veritabanı arayüzü üzerinden ayrı iletilir. Değer, arama verisi olarak kalmalı ve SQL sözdiziminin parçasına dönüşmemelidir.

Girdiler birleştirilerek oluşturulmuş bir sorguyu sonradan yalnızca hazırlamak bu ayrımı sağlamaz. Daha önce saklanmış veriler veya başka sistemlerden gelen değerler de sonraki sorgu oluşturulurken incelenmeden SQL metnine dönüştürülmemelidir.

Değerleri bağlamak, yapıyı sabit tutmak

sortKey gibi sıralama alanı farklı bir durumdur. Veri değerleri için kullanılan yer tutucular, istenen sütun adının veya sıralama yönünün yerine geçmez. Bu nedenle uygulama, bilinen seçimleri kodda sabit olarak belirlenen sütun ve yönlerle eşler. OWASP, parametre bağlama ile izin verilen yapısal seçimlerin bu ayrımını açıkça anlatır.

Parametre bağlama, oturum açmış kişinin istenen projeye erişme yetkisini de kontrol etmez. Bu yetki denetimi uygulamanın sorumluluğundadır. Yetkileri ihtiyaçla sınırlanmış bir veritabanı hesabı olası zararı azaltabilir; güvenli olmayan sorgu oluşturma biçimini ortadan kaldırmaz.

Kaynaklar