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.
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 alglayarak, query-string, form ve cookie de§erlerindeki zararl kodlar kontrol eden prosedurumz.
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 alglarsak, bu requesti hata sayfamza y”nlendiriyoruz.
//Buraya siz daha de§iŸik mantklar 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