Üye Ol | Bağlan
ANASAYFA | VERİTABANI | PROGRAMLAMA | HAKKIMIZDA | BLOG | ETKİNLİKLER | KAYNAKLAR
Yazı Hakkında
  Seviye:
Yazar:Yaşar GÖZÜDELİ
Okunma: 7493
Oylanma:35 kişi (7,17/10)
 
 
Tavsiye Et
Yazıcı Dostu
Evrak Çantama Al
 
KATEGORİLER
  VERİTABANI
    ORACLE
    HIZLI SQL KURSU-1
    SQL SERVER 2005
    SQL SERVER 2000
PROGRAMLAMA
    JAVA
    ADO.NET
    MOBİL PROGRAMLAMA
    ASP.NET
    VB.NET
    C# ve C#.NET
İŞARETLEME DİLLERİ
    HIZLI WEB PR. KURSU
    XML
HABERLER
EĞİTİM & SERTİFİKA
KİTAP
SÖYLEŞİ
HAKKIMIZDA
BLOG
ETKİNLİKLER
 
  XHTML,CSS,VBScript,ASP SQL Lab 2.0 Beta
Hızlı SQL Kursu(Yeni)
 
 
Son Eklenenler
 
SQL SERVER 2005
COALESCE Fonksiyonu ile Dinamik Where Şartları Hazırlamak

Transact SQL’de SQL Server 2008 Yenilikleri-1

SQL Server’da verileri Türkçe Karaktere Dönüştürmek

StrToCursor Prosedürü ile Hızlı ve Kolay Cursor Açmak

Triggerı Hangi Olayın Tetiklediğini Tespit Etmek

İleri Cursor Açma Tekniği

Yazılımcılar için SQL Server Erişim Güvenliği

JAVA
Java'ya GiriŞ - 3 : JCreator Editörü

HABERLER
Verivizyon.com Topluluk Kurucusuna MVP Ödülü

Verivizyon yeni sunucularında

 
Bu Bölümden
MS SQL Server'a Erişmek Hakkında Her şey(10033 yükleme)
Yazılımcılar için SQL Server Erişim Güvenliği(7493 yükleme)
SQL Server Verilerini 2005 Sürüme Aktarmak(7173 yükleme)
SQL Server 2005'de CLR Desteği-2(6765 yükleme)
İleri Cursor Açma Tekniği(6554 yükleme)
Rütbeleme Fonksiyonları ile Kayıtları Sıralamak(6170 yükleme)
COALESCE Fonksiyonu ile Dinamik Where Şartları Hazırlamak(5395 yükleme)
Tablo Tipli Kullanıcı Tanımlı Fonksiyonlar Kodlamak(5391 yükleme)
Transact SQL’de SQL Server 2008 Yenilikleri-1(5246 yükleme)
Satırları Sütuna veya Sütunları Satıra Dönüştürmek(5155 yükleme)
 
 
E-LİSTE
BT ve özellikle Veritabanı ile ilgili haber, yenilik ve etkinlikler hakkında önceden haber almak için bize e-mail adresinizi bırakabilirsiniz.

ANKET
SQL Server 2008'e geçtiniz mi?
Sorunsuz Geçtik
2005'e yeni geçtik
2000 bize yetiyor.
 

 


Yazılımcılar için SQL Server Erişim Güvenliği


Bir yazılımcı iseniz, uygulamanızın veritabanına erişiminin zaruri olduğunu bilirsiniz.
Ancak veritabanınıza sizden başka kimsenin erişmemesi için almanız gereken bir dize
önlemi gözardı etmemek gerekir. Bu makalade, SQL Server 2005 üstünde çalıştırılacak
bir uygulamayı “veritabanı erişim güvenli” hale getirmek için önemli bazı hususları
ele alacağız. Bir uygulamadan veritabanına sızmak için kullanılagelen belli başlı
yöntemleri nasıl durdurabileceğimizle ilgili noktalara değineceğiz.

Web Sitenizle SQL Server aynı sunucu üstünde ise almanız gereken güvenlik önlemleri

Veri yönlendirmeli siteler için kullanılan ASP veya ASP.NET uygulamaları, SQL Server ile aynı makinalarda çalıştırılır. Bu, sunucu giderlerini azaltmak, bakımı kolaylaştırmak veya network trafiğini azaltmak gibi kaygılardan dolayı tercih edilir. Ancak bu tür durumlarda en büyük tehlike, SQL Server’ın Internet tarafından gelecek saldırılara açık olma durumudur.

Böyle bir durumu farkeden saldırgan, hiçbir değişiklik yapılmamış SQL Server için IP, port ve kullanıcı adı değerlerine sahiptir. şifre için de kaba kuvvet(olası ihtimallerin tümünü deneme) yoluna gidecek demektir. Burada amacımız, saldırganın işini zorlaştırmak için SQL Server ‘in default değererini değiştirmekten ibarettir.

SQL Server Port Numarasını değiştirmek

Elbette durum, bir dize firewall ayarı ile dramatiklikten kurtarılabilir. Ancak biz, firewall’yn ötesinde bir önlem olarak SQL Server ayarları ile de durumu garantiye almak istiyorsak, SQL Server’ın dinlediği port numarasını değiştirmek ciddi bir çözüm olarak ele alınabilir. Bir SQL Server 2005 için Default SQL Server port numarasını değiştirmek için şu aşamaları takip edebilirsiniz:

  1. SQL Server Configuration Manager programını başlatın.
  2. Protocols for ile verilen düşümü tıklayın.
  3. Yana açılan pencereden TCP/IP öğesini seçin.
  4. IP Address sekmesini tıklayın.(şekil 1)

şekil 1: Dinamik port dinlemenin kaldırılması ve Default SQL Server port numarasının değiştirilmesi.

Bu ekranda TCP Dynamic Ports değeri boş bıraklılarak, SQL Server’in dinamik port kullanımı engellenebilir.

TCP Port değeri boş bıraklırsa SQL Server 1433 portunu dinler. Sib bu değeri başka bir port ile değiştirebilirsiniz. Bu durumda SQL Server servisini yeniden başlatarak yeni porttan SQL Server’in istek alabilir ve cevap verebilir hale gelmesini sağlayabilirsiniz.

Bu durum, herhangi bir saldırganın, SQL Server’ınızı ele geçirmek için bildik bir porta yüklenmesini engellemek için yapılmış bir ayarlamadır.

Standart sa login hesabının erişimini durdurmak

şayet web sunucusu ile SQL Server aynı makinede kurulu ise bir diğer alınmasında fayda bulunan önlem olarak, sa kullanıcısının sisteme erişimini engellemek ve kendimize tahmin edilemez başka kullanıcılar açmak faydalı olacaktır. Webuser, gibi genel kullanıcı adları da tahmin edilebilir kullanıcı adları olarak ele alınabilir.

SQL Server sa kullanıcısının sisteme erişimini durdurmak:

1.Management Studio ile ilgili SQL Server’a bağlanın.

2.Object Explorer penceresi aracılığıyla Security/logins sekmesine gidin.

3.sa kullanıcısını bulun, sağ tıklayarak properties ekranını açın.

4. login properties ekranından(şekil 2) veritabanı motoruna erişimini kısıtlamak için(DENY) seçeneğini ve login olamaması için de disabled seçeneğini işaretleyin.

şekil 2: SQL Server sa login hesabını dondurmak

DİKKAT:

Bunun dışında, Web sunucu üstünde bulunan bir SQL Server için oluşturacağınız kullanycılarınıza zor şifreler vermeyi ihmal etmeyin. Zor bir şifre tabiri günümüz için geçerli olmak üzere; harf, rakam ve ascii karakterleri(@~^… gibi) içeren ve 8 karakteri aşan şifreler için kullanılmaktadır.

Bağlantı İfadelerinizi Registry’e Kaydetmek

Bir önceki makalede ve bir çok eski makalede bağlantı ifadesinin, SQL Server’a erişim ile ilgili bütün bilgileri içeren bir ifade olduğunu görmüştük. şimdi bu ifadenin ard niyetliler için ele geçmesini önlemek için şifrelemeyi ele alacağız. Bir çok yerde, bağlantı ifadesini şifreleyip Windows Registry’sine kaydetmek bahsine rastlamışsınızdır. İşte bu işin nasıl yapılacağını ele alacağız.

DİKKAT:

Registry Windows ayarlarının tutulduğu bir ayarlar merkezidir ve umulmadık değişiklikler, sisteminizin zarar görmesine neden olabilir.

şayet paylaşımlı bir sunucu kullanıyorsanız, sunucu yöneticileri muhtemelen registry’e erişiminize izin vermeyeceklerdir. Bu durumda, ilk durum kadar ciddi bir güvenlik önlemi olmamakla birlikte, bağlantı ifadesini kodlarınızın içine şifreleyerek gömmeniz bir yere kadar tercih edilebilir. Ancak kesin bir yöntem değildir. Kaynakları takip ederek, alternatif bağlantı ifadesi kaydetme seçeneklerini inceleyebilirsiniz.

Şekil 3: Bağlantı ifadesini Trible DES ile şifreleyip geri çözebilen ve registry’e kaydedebilen C#.NET uygulaması (makale ekinde kaynak kodunu indirip çalıştırabilirsiniz.)

Bir ifadenin TribleDES ile şifreli halini elde etmek için, ekteki kütüphaneyi indirerek şu şekilde kullanabilirsiniz:

byte[] plainText = Encoding.ASCII.GetBytes(txtConnectionString.Text); 
byte[] key = Encoding.ASCII.GetBytes(txtKey.Text); 
byte[] initVec = Encoding.ASCII.GetBytes(txtInitializationVector.Text);
cTripleDES des = new cTripleDES(key, initVec); 
byte[] cipherText = des.Encrypt(plainText);
txtEncryptedString.Text = Convert.ToBase64String(cipherText);
                

DİKKAT:

TribleDES’ i kullanabilmek için anahtar’ın en az 16 ve başlangıç vektörünün de 8 karakter olması gerekir.

Yukarıdaki şekilde şifreli hali elde edilen ifadenin registry’e kaydedilmesi için şu türden bir ifade yeterli olacaktır:

RegistryKey rk = Registry.LocalMachine.OpenSubKey("Software", true);
rk = rk.CreateSubKey("TestApplication");

rk.SetValue("connectionString", txtEncryptedString.Text);
rk.SetValue("initVector",
Encoding.ASCII.GetBytes(txtInitializationVector.Text));
rk.SetValue("key", Encoding.ASCII.GetBytes(txtKey.Text));
MessageBox.Show("Bilgiler başarıyla registrye eklendi");

                

Uygulama HKEY_LOCAL_MACHINE\Software\TestApplication yoluna parametreleri ve değerlerini şifreli olarak eklemekte.

şekil 4: Registry’e aktarılmış bilgilerin regedit ile gösterilmesi

şifreli Bağlantı ifadesini bir ASP.NET uygulamasından çağırmak

şimdi artık tüm yapmamız gereken .NET kütüphanelerini kullanarak Software\TestApplication yolunda yer alan şifrelenmiş bağlantı ifadesi ve şifre çözmek için gerekli temel bilgileri alıp gerçek bağlantı ifadesini elde etmekten ibaret olacaktır.

Herhangi bir yerde tekrardan Connection String ifadesini tam olarak oluşturmamız gerektiğinde:

RegistryKey rk = Registry.LocalMachine.OpenSubKey(
						@"Software\TestApplication", false);
bSifreliBaglanti.Text = (string)rk.GetValue("connectionString");

byte[] initVector = (byte[])rk.GetValue("initVector");
byte[] strKey = (byte[])rk.GetValue("key");

cTripleDES des = new cTripleDES(strKey, initVector);

byte[] plainText = des.Decrypt(Convert.FromBase64String(
							   lbSifreliBaglanti.Text));
lbGercekBaglanti.Text = Encoding.ASCII.GetString(plainText);

Örneği yeterli olacaktır. Bundan sonra, bağlantı ifadesi olarak Web.config dosyasında sadece TestApplication şeklinde registry girdisinin adını tutmak sizin için yeterli olacaktır.

SQL Enjeksiyonu ve korunma yolları hakkında

SQL Enjeksiyonu da yine veriviyon bünyesinde bir çok makalede ayrıntılarını bulabileceğiniz bir saldırı türüdür. Burada SQL Enjeksiyonunun detaylarından ziyade korunma yöntemlerini ele alacağız.

SQL Enjeksiyonu, fazla bir bilgi birikimi gerektirmeyen, yüzeysel birkaç bilgi ile bile tehlikeli olabilecek bir saldırı türüdür. Bu nedenle de verilerin kalbine direk yönlebilen tehlikeli bir saldırı tarzı olarak düşünülmelidir.

SQL Enjeksiyonundan kaçınmak için bir yazılymcının kodlarında mutlaka tek tırnakları yakalayarak iki tek tırnak ile değiştiriyor olması gerekir. Bu işi biraz ileri götürüp, kullanıcıdan alınan her değeri bir temizleme fonksiyonundan geçirmek,merkezi bir kullanıcı verileri temizleme yeteneğini programınıza kazandıracaktır.

Örnek bir C# Temilzeme fonksiyonu:

private string DokunmaSqlime(string kullaniciGirdisi)
{
// SQL içerisinde problem çıkartan karakterler
  // '  gelirse  ''  yapılmalı
  // [  gelirse  <] yapılmalı
  // %  gelirse [%] yapılmalı
  // _  gelirse [_] yapılmalı

  string s = inputSQL;
  s = inputSQL.Replace("'", "''");
  s = s.Replace("[", "<]");
  s = s.Replace("%", "[%]");
  s = s.Replace("_", "[_]");
  return s;
}  

Bu türden bir fonksiyonu, kullanıcıdan veri aldığınız her bir değer için şu şekilde kullanmak gerekir:

kullaniciAd=DokunmaSqlime(txtKullaniciAd.Text);

Öte yandan, kullanıcı girdilerini mümkün olduğu kadar sayılara indirgemek ve look-up tablolary, drop box gibi bu amaca yönelik girdi elemanları ve veritabanı öğelerini kullanmanız işlemlerinizi kolaylaştıracaktır.

Stored Procedure veya Ad-Hoc bütün sorgularınızda kullanıcıdan gelen SQL ifadesi kısmı için Parametre nesnelerini kullanmanız, SQL güvenliğinizi artıracaktır.

Sonuç ve Değerlendirme

Bu makalede, SQL Server’a bir yazılımın erişimini güvenli hale getirmek için dikkat edilmesi gereken temel hususları ele aldık.

Kaynaklar ve Ek Bilgi

  1. Veri erişim Güvenliği Hakkında genel http://msdn2.microsoft.com/en-us/library/aa302392.aspx
  2. SQL Server port numarası ile ilgili değişiklikler hakkında http://msdn2.microsoft.com/en-us/library/ms177440.aspx
  3. Bağlantı ifadesinin registry’e kaydedilmesi hakkynda http://msdn2.microsoft.com/en-us/library/aa302406.aspx
  4. TribleDES basit gerçeklemesi hakkında http://www.codeproject.com/vb/net/VB_NET_TripleDES.asp
  5. SQL Enjeksiyonu hakkında http://www.verivizyon.com/detail.asp?cid=283

Makalede kullanılan örnek kodlar indirmek için tıklayınız[05.11.2007]

Oy Ver: Kötü 1  2  3  4  5  6  7  8  9  10  İyi


YORUMLAR

slm
güzel olmuş teşekkürler
dj_alii 18.01.2008 09:13:00

YORUMUNUZ
Kullanıcı :
Başlık :
İçerik:
Lütfen Giriş Yapınız

Yaşar GÖZÜDELİ

Ystanbul Üniversitesi Bilgisayar Mühendisli?i mezunu. 2000 yylyndan bu yana birçok kurumda veritabany uygulamalary geli?tirdi ve "SQL Server ile Veritabany Tasarymy ve Gerçekleme" e?itimleri verdi. NetLIFE, ComputerLIFE, PCLIFE gibi bazy bilgisayar-Magazin dergilerinde yazylary yayynlandy. Halen Byte Türkiye'nin serbest yazarlaryndan ve bu dergi tarafyndan yayynlanan Veritabany Programlama serisinden iki kitapçy?yn yazary. 'veritabany akademisi' slogany ile Veritabany programlama alanynda içerik payla?ym toplulu?u Verivizyon.com'un kurucu üyesi. Bazy E-ticaret projelerinde görev aldy ve halen C# ve ASP.NET ile veritabany uygulamalary geli?tirmekte.

"SQL Server ile Temel Veritabany Programlama" adynda yayynlanmy? ilk kitaby bu alanda kabul gördü. Halen birçok üniversitede ders kitaby olarak okutulmakta. SQL Server ile veritabany programlama hakkynda, "Yazylymcylar için SQL Server 2005" adly yayynlanmy? ikinci bir kitaby daha bulunmakta. Bazy üniversitelerde veritabany yönetim sistemleri dersi okuttu. SQL Server 2000 ve 2005 ile ilgili birçok seminer ve e?itimler verdi. Gazi Üniversitesi Bilgisayar Mühendisli?i yüksek lisans programyndan "Meta-Sezgizel Yöntemlerle XQuery Optimizasyonu" üstüne tez çaly?masy ile mezun olmu?tur. 2007 yylynda MS SQL Server 2007 alanynda yapty?y çaly?malaryndan dolayy Microsoft tarafyndan "En De?erli Profesyonel"MVP ünvany ile ödüllendirildi.

Kişisel Sitesi:http://blog.verivizyon.com/ygozudeli

Yazara Ait Son Eklenen Makaleler
Transact SQL’de SQL Server 2008 Yenilikleri-1(01.09.2008)
SQL Server’da verileri Türkçe Karaktere Dönüştürmek(26.08.2008)
Yazılımcılar için SQL Server Erişim Güvenliği(05.11.2007)
MS SQL Server'a Erişmek Hakkında Her şey(21.05.2007)
Nesneleri İlişkisel Veritabanı ile Konuşturmak ve NHibernate(04.09.2006)
SQL Server Verilerini 2005 Sürüme Aktarmak(28.08.2006)
Rütbeleme Fonksiyonları ile Kayıtları Sıralamak(15.06.2006)
Tablo Tipli Kullanıcı Tanımlı Fonksiyonlar Kodlamak(01.06.2006)
SQL Server 2005'de CLR Desteği-2(17.01.2006)
Tip Geçişlerini Anlamak veya System.Data.SqlTypes(24.11.2005)
 

© 2003 - 2005 Verivizyon.com 'Developer Academy'. Tüm hakları saklıdır. Kullanım Sözleşmesi | Gizlilik İlkeleri | İletişim