/******雪龍原創*******/
//版權所有,末經作者同意不得轉載
前段忙了好長一段時間,終於有點時間學點新東西了。記得前段看過幾篇安全方面的文章,提到SQL注入的問題,於是就想做些防注入方面的探索。要防范注入,最重要是對輸入的信息,尤其是放到SQL語句中執行的信息,進行驗證,保證其中不包含惡意的SQL元素,而這種驗證,正好屬於正則表達式的范圍,於是對C#的正則表達式進行了實驗,以其滿足我的需要,現將實驗結果與大家分享。
運行環境:WinXP+IIS6+ASP.Net+C#
正則表達式是一種用於模式匹配和替換的強有力工具,它通過構建一個表達式對輸入的字符串進行模式匹配,然後返回處理後的結果,如果你對它還不了解,請繼續往下看。
以最廣泛的WEB身份驗證為例:我們從頁面中接收到輸入的用戶名,存入變量Temp_UserName,此時變量中可能含有惡意的信息,我們想要用戶名中只包含英文字符,數字和下劃線,就要構造正則表達式對Temp_UserName進行處理,在C#中是這樣進行的:
我們要使用的是System.Text.RegularExpressions.Regex.Replace(字符串,正則表達式,替換字符)這一靜態方法,其中參數字符串當然就是我們的Temp_UserName了,正則表達式我先給出"\\W",替換字符是"",整個方法完成後就是
System.Text.RegularExpressions.Regex.Replace(Temp_UserName,"\\W","");
//它用來替換與正則表達式匹配成功的字符
下面著重說一下C#中正則表達式的構造:
C#正則表達式的構造和字符串相同,都是放在引號當中,形式如"look"。
正則表達式中提供了專門的“元字符”,它是在正則表達式中具有特殊意義的專用字符,常用的元字符包括"+","*","?","\\s","\\S","\\d","\\w","\\W",區分大小寫,下面就對元字符進行說明:
"+" 如"Lo+"匹配L後面o出現一次或多次的字符串,如"Love","Look"都是
"*" 待測試
"?" 待測試
"\\s" 匹配單個空格符,包括TAB和換行符。
"\\S" 匹配除單個空格符之外的所有字符。
"\\d" 匹配從0到0的數字。
"\\w" 匹配字母、數字和下劃線。
"\\W" 匹配所有與\\w不匹配的字符。(文中第一個例子就是用了這個元字符,將所有的單引號和空格以及其它非法字符都去掉了)
正則表達式中還提供了專門的定位符,它包括:"^","{$body}quot;,"\\b"
正則表達式中還提供了專門的范圍介定符"[]",否定符[^]
[a-z] 表示26個小寫字母中的任意一個
[abcd] 表示abcd這四個字母中的任意一個
[0-9] 表示10個數字
[^a-z] 表示除26個小寫字母以外的字符