這些天,csdn上討論sql注入攻擊似乎是如火如荼啊...我也來參合一下..
如下,checkparams函數,接收參數任意,如參數中有字符串,則對字符串進行檢查,如參數中有集合(如array之類,總之是實現了icollection的),則對集合中的字符串元素進行檢查.
大家可根據具體情況來定要過濾的字符,我這個例子里暫定為=號和'號,實際上我個人認為,過濾了這兩個,似乎要進行sql注入就已經比較困難了,當然,我對sql是菜鳥,歡迎高手指正,謝謝.我的郵箱(msn): [email protected]
bool checkparams(params object[] args)
{
string[] lawlesses={"=","'"};
if(lawlesses==null||lawlesses.length<=0)return true;
//構造正則表達式,例:lawlesses是=號和'號,則正則表達式為 .*[=}'].* (正則表達式相關內容請見msdn)
//另外,由于我是想做通用而且容易修改的函數,所以多了一步由字符數組到正則表達式,實際使用中,直接寫正則表達式亦可;
string str_regex=".*[";
for(int i=0;i< lawlesses.length-1;i++)
str_regex+=lawlesses[i]+"|";
str_regex+=lawlesses[lawlesses.length-1]+"].*";
//
foreach(object arg in args)
{
if(arg is string)//如果是字符串,直接檢查
{
if(regex.matches(arg.tostring(),str_regex).count>0)
return false;
}
else if(arg is icollection)//如果是一個集合,則檢查集合內元素是否字符串,是字符串,就進行檢查
{
foreach(object obj in (icollection)arg)
{
if(obj is string)
{
if(regex.matches(obj.tostring(),str_regex).count>0)
return false;
}
}
}
}
return true;
}