Konu Başlıkları: SQL Query, SQL Injection, Data Safety

Hacker yada kötü niyetli kullanıcılar sizin programınızdaki açığı kullanarak basit bir giriş ile sitenizin veritabanında onarılması güç sorunlar çıkarabilirler. Bunun en çok yaşandığı örnek SQL Injection vakaları. O nedir diye sorarsanız: giriş yapılacak bir bölümün (örneğin TextBox) programınızda direk SQL sorgusuna ifade olarak eklenmesi ve kullanıcı tarafından girilen kötü amaçlı SQL ifadesinin verilerinize zarar vermesi şeklinde tanımlanabilir.

Örneğin sitenizde TextBox ile kullanıcıya ait bir veri giriş bölümü olsun. Bu giriş için SQL Injection oluşma durumu aşağıdaki şekilde olabilir:

protected void SQLInjection_KotuOrnek(object sender, EventArgs e)

{

   string connStr = “Server=(local);Database=Northwind;Integrated Security=SSPI”;

 

   // Bu yanlış bir kullanım ve SQL Injection a müsait

   string cmdStr = “insert into Shippers (CompanyName, Phone) values (’” +

      txtCompanyName.Text + “‘, ‘” + txtPhone.Text + “‘)”;

   using (SqlConnection conn = new SqlConnection(connStr))

   using (SqlCommand cmd = new SqlCommand(cmdStr, conn))

   {

      conn.Open();

      cmd.ExecuteNonQuery();

   }

}



SQL Injection dan korunmak için Parametre girişi kullanmalısınız. Bu durumda kötü amaçlı bir sorgu girilse bile programınız ya hata verecektir, yada bu sorguyu normal bir veri girişi olarak algılayacaktır:

protected void SQLInjection_IyiOrnek(object sender, EventArgs e)

{

   string connStr = “Server=(local);Database=Northwind;Integrated Security=SSPI”;

 

   // Bu doğru bir kullanım çünkü kullanıcı girişleri parametreler sayesinde

   // olacak ve girişler SQL sorgusunun bir parçası olmayacak.

   string cmdStr = “insert into Shippers (CompanyName, Phone) values (” +

      “@CompanyName, @Phone)”;

   using (SqlConnection conn = new SqlConnection(connStr))

   using (SqlCommand cmd = new SqlCommand(cmdStr, conn))

   {

      // Parametreler

      cmd.Parameters.AddWithValue(“@CompanyName”, txtCompanyName.Text);

      cmd.Parameters.AddWithValue(“@Phone”, txtPhone.Text);

      conn.Open();

      cmd.ExecuteNonQuery();

   }

}