SQL Injection Nedir

SQL Injection, kötü niyetli bir kullanıcının uygulamanın veri tabanına gönderdiği SQL sorgularını manipüle ederek sisteme zarar vermesi veya yetkisi olmayan verilere erişmesi durumudur.
Bu saldırı türü genellikle kullanıcıdan alınan verilerin doğrudan SQL sorgusuna eklenmesi sonucu ortaya çıkar.

Aşağıdaki gibi bir şey olsaydı SQL Injection riski olurdu:

SET @SQL = 'SELECT * FROM ' + @user_input + ' WHERE id = ' + @id;
EXEC (@SQL);

Neden Tehlikeli?

  • @user_input doğrudan SQL sorgusuna ekleniyor.
  • Herhangi bir filtreleme veya kontrol yok

Kötü Niyetli Kullanıcı Şöyle Bir Girdi Verebilir:

Users; DROP TABLE Users --

Oluşacak SQL:

SELECT * FROM Users; DROP TABLE Users -- WHERE id = 1

Sonuç: Tablo silinir. Veri kaybı yaşanır. Sistem zarar görür.

Yapılması Gerekenler

  • Parametreli sorgular kullanılması gerekmektedir. (sp_executesql)
  • Tablo ve kolon adlarını kullanıcıdan alınmaması gerekmektedir.
  • Dinamik SQL gerekiyorsa kontrollü kullanılması gerekmektedir.

Kaçınılması Gerekenler

  • Kullanıcı girdisini string birleştirme ile SQL’e eklemek
  • EXEC(@SQL) gibi kontrolsüz çalıştırmalar
  • Filtreleme var diye kendini güvende sanmak

Sql injection örnekleri:

SET @SQL = 
'SELECT * FROM Orders WHERE order_id = ' + @orderId

EXEC (@SQL)

Kullanıcı 1 OR 1=1 şeklinde girdi yaparsa:

SELECT * FROM Orders WHERE order_id = 1 OR 1=1

Tüm siparişlerin döneceği sonuç dönmektedir.

Sql injection’a sebep olan başka bir sorgu:

SET @SQL = 
'INSERT INTO Users (username) VALUES (''' + @username + ''')'
EXEC (@SQL)

Kullanıcı aşağıdaki şekilde giriş yaparsa:

test'); DROP TABLE Users; --

Çalıştırılacak sorgu aşağıdaki gibi olmaktadır.

INSERT INTO Users (username) 
VALUES ('test'); DROP TABLE Users; --')

Bu makalede sql injection yapısını görmüş olduk. Başka makalede görüşmek dileğiyle..

Anne ve babanın hoşnutluğu, Allah’ın rızasına açılan önemli bir kapıdır.(Hadis)

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir