我想緩存輸入,這看起來像是SQL注入。我現在知道,Reg-ex用於查找SQL注入不是一種最好的方式,但我只需要對它進行一些研究,並且我正在尋求幫助來解決一些錯誤。所以我寫的方法:幫助查找Reg-ex使用錯誤
public static bool IsInjection(string inputText)
{
bool isInj = false;
string regexForTypicalInj = @"/\w*((\%27)|(\'))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix";
Regex reT = new Regex(regexForTypicalInj);
if (reT.IsMatch(inputText))
isInj = true;
string regexForUnion = @"/((\%27)|(\'))union/ix";
Regex reUn = new Regex(regexForUnion);
if (reUn.IsMatch(inputText))
isInj = true;
string regexForSelect = @"/((\%27)|(\'))select/ix";
Regex reS = new Regex(regexForSelect);
if (reS.IsMatch(inputText))
isInj = true;
string regexForInsert = @"/((\%27)|(\'))insert/ix";
Regex reI = new Regex(regexForInsert);
if (reI.IsMatch(inputText))
isInj = true;
string regexForUpdate = @"/((\%27)|(\'))update/ix";
Regex reU = new Regex(regexForUpdate);
if (reU.IsMatch(inputText))
isInj = true;
string regexForDelete = @"/((\%27)|(\'))delete/ix";
Regex reDel = new Regex(regexForDelete);
if (reDel.IsMatch(inputText))
isInj = true;
string regexForDrop = @"/((\%27)|(\'))drop/ix";
Regex reDr = new Regex(regexForDrop);
if (reDr.IsMatch(inputText))
isInj = true;
string regexForAlter = @"/((\%27)|(\'))alter/ix";
Regex reA = new Regex(regexForAlter);
if (reA.IsMatch(inputText))
isInj = true;
string regexForCreate = @"/((\%27)|(\'))create/ix";
Regex reC = new Regex(regexForCreate);
if (reC.IsMatch(inputText))
isInj = true;
return isInj;
}
「的inputText」 - 這裏來特林一些文本框鍵入文本。 但似乎我犯了一些錯誤,因爲我的代碼沒有檢測到簡單的sql注入。我做錯了什麼?我猜想在定義正則表達式或者比較兩個值時會出現問題。 請幫我解決一些Reg-ex'es工作。 謝謝
發佈一些失敗的案例,所以我們有一些工作。 – Oded 2010-03-05 21:09:02
爲什麼不使用參數化查詢? – Ken 2010-03-05 21:12:56
@Oded:我沒有得到我的代碼沒有錯誤,只是這種方法不工作,當我試圖趕上一些簡單的SQL注入,如: '或1 = 1 - 'UNION SELECT id,name,'',0 FROM sysobjects ';更新產品SET單價= 0.01 依此類推...... – Vytas999 2010-03-05 22:01:50