Hackerların belkide en çok başvurduğu yöntemlerden biri de sqlinjection ataklarıdır. Bunu önlemenin değişik yolları vardır elbette.

Ancak ben size en kısa zahmetsiz olanından bahsetmek istiyorum. Çalışma mantığı olarak; Sayfanıza gelen her türlü reguesti algılayıp , eğer zararlı bir kod var ise genel hata sayfasına yönlendiren bir mekanizmadır.

işte örnek kodumuz;

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

 

namespace Sample

{

public class SampleSqlInjectionScreeningModuleCS : IHttpModule

{//Mustafa KOÇER - dotnetkosesi.com - 07.07.2008

//Aşağıdaki dizi zararlı kelimeleri yada işaretleri içermektedir. Siz kendinize göre ekleme yada çıkarma yapabilirsiniz.

public static string[] blackList = {"--",";--",";","/*","*/","@@","@",

"char","nchar","varchar","nvarchar",

"alter","begin","cast","create","cursor","declare","delete","drop","end","exec","execute",

"fetch","insert","kill","open",

"select", "sys","sysobjects","syscolumns",

"table","update"};

public void Dispose()

{

 

}

 

public void Init(HttpApplication app)

{

app.BeginRequest +=
new EventHandler(app_BeginRequest);

}

//gelene her requesti alglayarak, query-string, form ve cookie de§erlerindeki zararl kodlar kontrol eden prosedurumz.

void app_BeginRequest(object sender, EventArgs e)

{

HttpRequest Request = (sender as HttpApplication).Context.Request;foreach (string key in Request.QueryString)

CheckInput(Request.QueryString[key]);

foreach (string key in Request.Form)

CheckInput(Request.Form[key]);

foreach (string key in Request.Cookies)

CheckInput(Request.Cookies[key].Value);

}

 

//e§er k”t bir de§er alglarsak, bu requesti hata sayfamza y”nlendiriyoruz.

//Buraya siz daha de§iŸik mantklar dŸnebilirsiniz.

private void CheckInput(string parameter)

{

for (int i = 0; i < blackList.Length; i++)

{

if ((parameter.IndexOf(blackList[i], StringComparison.OrdinalIgnoreCase) >= 0))

{

 

HttpContext.Current.Response.Redirect("~/Error.aspx");

}

}

}

}

}

 

 

Şimdide sıra yazdığımız bu httpmodule ü web.config e tanımlamaya geldi.

Eğer  IIS6 üzerinde ASP.NET 2.0 , yada IIS7 üzerinde ASP.NET 2.0 da Classic Mode da çalışıyorsanız. Ağaşıdaki koyu yazılmış kodu web.config e ekleyiniz.

<system.web>
     …
     <httpModules>
          …
          <add name="SampleSqlInjectionScreeningModuleCS" type="Sample.SampleSqlInjectionScreeningModuleCS"/>
          …
     </httpModules>
     …
</system.web>

 

Eğer  IIS7  üzerinde ASP.NET 2.0 da Integrated Mode da çalışıyorsanız aşağıdaki koyu yazılmış kodu web.config e eklemeniz gerekir.

<system.webServer>
     …
     <modules>
          …
         <add name="SampleSqlInjectionScreeningModuleCS" type="Sample.SampleSqlInjectionScreeningModuleCS" preCondition="managedHandler"/>
          …
     </modules>
     …
</system.webServer>

 

Sorularınızı , yorumlarınızı bekliyorum.

Yararlı olması dileğiyle,

Mustafa KOÇER

mkocer@dotnetkosesi.com

 

2 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5