okan | 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şabilecekzaafiyetlerden 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!