Pythontr

husonet | Tarih: 23.04.2017

Sql injection nedir?

Asp.net Sql injection zaafiyeti ve alınacak önlemler

Merhaba arkadaşlar, (Not:Lütfen öneri ve sorularınızı yorum olarak atınız. Teşekkürler şimdiden)
Bu yazımda

sql injection zaafiyeti

nden bahsediyor olacağım. Web uygulamalarının olmazsa olmazı veri tabanlarıdır. Veri tabanı ile uygulamayı sql cümlecikleri ile konuştururuz. Bu konuşturma sırasında oluşabilecek
zaafiyetlerden birisi sql injection zaafiyetidir.



Sql injection, kullanıcının program içindeki sql sorgu cümleciğine müdahale edilebilmesidir aslında. Kullanıcı sql cümleciğine müdahale ederek yetkisi olmayan verilere erişebilir. Bu da kullanıcı bilgilerinden tutun gizli bilgilerin dışarıya açık hale gelmesi demektir.


Uygulamalarda bilgi gizliliği ve yetkilendirmeyi yok eden sql injection'ı önlemek için sql ile uygulamanın konuşturulması sırasında dikkat edilmelidir. Bunun için stored procedure kullanılabilir. Bu bir önlemdir ancak stored procedure kullanılmasına rağmen halen sql injection açığı bulunma ihtimali vardır. Bu nedenle sql sorgularının parametre ile verilip türü beliritilmesi açığı bi nebze de önleyebilecek yöntemlerdendir. Bir dedışarıdan gelen parametrelerdeki ', " ve = karakterleri sorgudan önce ezilmelidir. Bu açıklamamı aşağıda örnek kod satırları ile açıklayacağım.



Aşağıda sorgu gerçekleşmeden gerekli karakterlerin ezme işlevi yapan fonksiyonu kullanabilirsiniz.



public string security(string data)
{
if (data != null)
{
if (data.Contains("&"))
data = data.Replace("&", "&");
if (data.Contains("&"))
data = data.Replace("&", "&");

if (data.Contains("<"))
data = data.Replace("<", "<");
if (data.Contains("<"))
data = data.Replace("&", "&");

if (data.Contains(">"))
data = data.Replace(">", ">");
if (data == ">")
data = data.Replace("<", "<");

if (data.Contains("'"))
data = data.Replace("'", "'");
if (data.Contains("'"))
data = data.Replace("'", "'");
if (data == "'")
data = data.Replace("'", "'");

if (data.Contains("\""))
data = data.Replace("\"", """);
if (data.Contains("""))
data = data.Replace(""", """);

if (data.Contains("="))
data = data.Replace("=", "");

}
return data;
}



Aşağıdaki kod satırları da örnek select sorgu satırlarıdır.



using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.
ConnectionStrings["DefaultConnection"].ConnectionString))
{
deger = security(deger);
query = "SELECT * from TABLO_ADI where ID=@ID";
using (SqlCommand cmd = new SqlCommand(query, conn))
{
cmd.Parameters.Add("@ID", SqlDbType.Varchar).value = deger;
conn.Open();
using (SqlDataReader row = cmd.ExecuteReader())
{
while (row.Read())
{


}
}
}
conn.close();
}


Güvenli uygulamalar!