SQL injection, web uygulamalarında en yaygın ve ciddi güvenlik açıklarından biridir. Bu nedenle, SAST (Static Application Security Testing) araçlarıyla tespit edilmesi ve önlenmesi büyük önem taşır. Peki, SQL injection karşıtı SAST kuralları nasıl hazırlanmalı? İşte detaylar:
İlk olarak, SAST kuralları, kodun statik analizi sırasında potansiyel güvenlik açıklarını tespit etmek üzere yapılandırılır. SQL injection’a karşı kurallar hazırlarken, özellikle aşağıdaki noktaları göz önünde bulundurmak gerekir:
- Dinamik Sorguların Kontrolü:
Kodda doğrudan kullanıcı girdilerinin SQL sorgularına gömüldüğü yerler tespit edilmelidir. Bu noktalar genellikle
exec(),
query(),
execute() gibi fonksiyon çağrıları içinde bulunur.
Kurallar, parametrelerin doğrudan sorguya gömüldüğü durumları uyarı ile işaretlemelidir.
- Kullanıcı Girdilerinin Filtrelenmesi ve Parametreli Sorgular:
Kurallar, kullanıcı girdilerinin doğrulama ve temizleme işlemlerinden geçirilip geçirilmediğini kontrol etmelidir. Ayrıca, parametre bağlama (prepared statements) kullanımı teşvik edilmelidir.
Örneğin, kurallar,
string concatenation ile oluşturulan sorguları tespit edip, bunlara dikkat edilmesini sağlamalıdır.
- Güvenli Kod Yazım Standartları:
Kurallarda, güvenli sorgu yazım kurallarına uygunluk denetlenmelidir. Bu, örneğin, ORM kullanımı veya ORM benzeri yapıların tercih edilmesi gibi en iyi uygulamaları içermelidir.
Kurallar, SQL sorgularında doğrudan string manipülasyonunun yerine, parametreli sorgular veya ORM kullanımıyla güvenliği artıran kodları tanımlamalıdır.
- Statik Analiz İçin Regex ve Kalıp Tanımları:
Kural setinde, sık kullanılan SQL sorgusu kalıpları ve string birleştirme örüntüleri regex ile tanımlanabilir. Örneğin,
"(SELECT|INSERT|UPDATE|DELETE).*" + kullanıcı_girdisi gibi kalıplar uyarı oluşturabilir.
- Sorgu ve Kullanıcı Girdisi Bağlantısı:
Kurallar, kullanıcı girdisinin doğrudan sorguya gömüldüğü ve herhangi bir parametrik bağlamda kullanılmadığını tespit etmelidir. Bu, genellikle analiz sırasında kodun akışını izleyerek yapılır.
Sonuç olarak, SQL injection’a karşı etkili bir SAST kural seti, kodun statik analizinde kullanıcı girdilerinin SQL sorgularına doğrudan gömülüp gömülmediğine, parametreli sorgu kullanılıp kullanılmadığına ve güvenli kod yazım standartlarına uyulup uyulmadığına odaklanmalıdır. Ayrıca, düzenli güncellemeler ve yeni saldırı vektörlerine karşı test edilmesi, güvenlik seviyesini artırır.
Bu yaklaşım, sadece tespit değil, aynı zamanda geliştirme aşamasında güvenli kod yazımını teşvik eder. Soruşturmada kullanılan regex kalıplarını ve kuralları, projeye ve kullanılan teknoloji stack'ine göre özelleştirmek en iyi sonucu verir.