本來對正規表示式不是很了解,但由於專案需要,專案主要沒有採用儲存過程方式來儲存 sql語句,所以很有可能被黑客用sql注入攻擊,現在就在網上找了找解決辦法,在業務層來過濾sql語句,防止sql注入攻擊,主要是採用了正規表示式,因為正規表示式對字串的操作是很強大的.
首先用乙個validate()類來封裝正規表示式和相關操作:
//驗證是否有sql注入字元
private bool validatequery(hashtable queryconditions)
;#endregion
//構造正規表示式
string str_regex = ".*("
for (int i = 0; i < strbadchar.length - 1; i++)
str_regex += strbadchar[strbadchar.length - 1] + ").*"
//避免查詢條件中_list情況
foreach (string str in queryconditions.keys)
string tempstr = queryconditions[str].tostring();
if (regex.matches(tempstr.tostring(), str_regex).count > 0)
}return false;
}queryconditions 是乙個hashtable,用於傳入查詢條件,hashtable中的鍵值(key)為:@name,相對應sql中的引數,那value則對應為引數的實際值了.
正規表示式的應用主要是按這樣的規律來過濾字串的:
.*(and|exec|select|update|or|'|''|).* // str_regex
核心函式主要是: regex.matches(tempstr.tostring(), str_regex).
要是在 tempstr 字串中含有非法字元, 則函式的count值將大於0
好了,就這樣就可以判斷是否含有sql注入攻擊字元了.
正規表示式防止SQL注入
本來對正規表示式不是很了解,但由於專案需要,專案主要沒有採用儲存過程方式來儲存 sql語句,所以很有可能被黑客用sql注入攻擊,現在就在網上找了找解決辦法,在業務層來過濾sql語句,防止sql注入攻擊,主要是採用了正規表示式,因為正規表示式對字串的操作是很強大的.首先用乙個validate 類來封裝...
使用正規表示式來防止SQL注入
只要幾個字元就能防sql注入 正規表示式 前天朋友的 被sql掛馬了,好慘,整個資料庫不能用了。因為裡面全是指令碼。崩潰 今兒他總算是把資料庫還原完事了 還好有急時備份 之後打 和我說了這事兒。忍不住建意他在所有有使用者輸入的地方進行驗證,引用一句名言 所有輸入都是罪惡的 關於防注入,是很平常的話題...
sql正規表示式 SQL中的正規表示式
sql正規表示式 sql中的正規表示式 sql的查詢語句中,有時會需要引進正規表示式為其複雜搜尋指定模式。下面給出一些 regexp 在mysql 語句中應用 非全部 1 匹配字串的開始部分。mysql select fo nfo regexp fo 0mysql select fofo regex...