SORU
26 Mayıs 2009, Salı


Kaçınarak parametreler olmadan SQL enjeksiyon

Burada başka bir tartışma bizim kod parametrize sql sorguları kullanarak ilgili çalışma yapıyoruz. Tartışmanın iki tarafı var: sql enjeksiyon ve gerekli olduğunu düşünmüyorum diğer adamlara karşı korumak için ve her zaman parametrelerini kullanmalıyız ki bazıları Bana. Bunun yerine bütün dizeleri iki kesme ile tek bir kesme sql enjeksiyonları önlemek için değiştirmek istiyorlar. Bizim veritabanları Sql Server 2005 veya 2008 tüm çalışan ve kod tabanı üzerinde çalıştığı .NET 2.0 çerçeve.

Bana C sana basit bir örnek vereyim#:

Bize bunu kullanmak istiyorum

string sql = "SELECT * FROM Users WHERE Name=@name";
SqlCommand getUser = new SqlCommand(sql, connection);
getUser.Parameters.AddWithValue("@name", userName);
//... blabla - do something here, this is safe

Diğer çocuklar bunu yapmak isterken:

string sql = "SELECT * FROM Users WHERE Name="   SafeDBString(name);
SqlCommand getUser = new SqlCommand(sql, connection);
//... blabla - are we safe now?

SafeDBString işlevi aşağıdaki gibi tanımlanır

string SafeDBString(string inputValue) 
{
    return "'"   inputValue.Replace("'", "''")   "'";
}

Şimdi, tüm dize değerlerini SafeDBString kullandığımız sürece bizim sorguları güvende oluruz. Değil mi?

SafeDBString fonksiyonu kullanmak için iki sebep vardır. İlk taş devrinden beri bu şekilde oldu, ve ikinci olarak, veritabanı üzerinde çalışan tam sorgu gördüğünüz için sql ifadeleri hata ayıklama daha kolaydır.

Yani o zaman. Benim sorum gerçekten SafeDBString işlevi sql enjeksiyon saldırıları önlemek için kullanmak için yeterli olup olmadığıdır. Bu güvenlik önlemi tatili kod örnekleri bulmak için çalışıyorum, ama herhangi bir örnek bulamadım.

Bu sonu olabilir orada kimse var mı? Bunu nasıl yapardın?

DÜZENLEME: Cevaplar şimdiye kadar özetlemek gerekirse:

  • Kimse Sql Server üzerinde SafeDBString 2005 veya 2008 henüz aşmanın bir yolunu buldu. İyi mi düşünüyorum?
  • Bazı cevaplar parametrize sorguları kullanırken performans kazanç elde dikkat çekti. Neden sorgu planları yeniden kullanılabilir.
  • Biz de parametrize sorguları kullanarak daha kolay, daha okunabilir kod korumak için vermek konusunda hemfikir
  • Daha fazla sayıda dönüşüm için SafeDBString, dize çeşitli sürümleri kullanın ve Tarih dönüşümleri için dize parametreleri kullanmak her zaman daha kolaydır.
  • Otomatik parametreleri kullanarak dönüşüm türü, tarih veya ondalık sayılar ile çalışıyoruz özellikle faydalı bir şey.
  • Ve son olarak: JulianR yazdığı gibi Don't try to do security yourself. Veritabanı sunucuları güvenlik, zaman ve para harcamak. Daha iyi yapabileceğimiz bir yol ve onların işi yapmak için çalışmalıyız hiçbir sebep yok.

Bu yüzden kimse SafeDBString işlevi basit güvenlik kırmak mümkün iken diğer iyi argümanlar var. Teşekkürler!

CEVAP
26 Mayıs 2009, Salı


Doğru cevap bence

Güvenlik kendiniz yapmaya çalışmayın. Ne için vardır ne olursa olsun kullanmak için çalışıyorlar, daha doğrusuçalışıyorbunu kendin yap. Kararın ne olursa olsun hakkında güvenlik, yanlış olabilir. Kendi yaklaşım görünebilir olarak güvenli (ve titrek en iyi görünüyor) olarak, bir şeyi Gözden kaçırıyorsun bir risk var ve gerçekten güvenlik konusunda riske atmak istiyor musunuz?

Parametreleri kullanın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Commander Chalkboard

    Commander Ch

    20 Ocak 2014
  • Dopelives

    Dopelives

    30 Temmuz 2009
  • TomOdellVEVO

    TomOdellVEVO

    29 Mayıs 2012