當前位置:首頁 » 凈水方式 » 正則過濾sql注入

正則過濾sql注入

發布時間: 2020-12-30 06:59:16

A. 如何檢測SQL注入和CSS攻擊漏洞

對於他們的攻擊,主要是通過使用正則表達式來做輸入檢測:

  1. 檢測SQL meta-characters的正則表達式 :/(\%27)|(』)|(--)|(\%23)|(#)/ix

    1. 解釋:我 們首先檢查單引號等值的hex,單引號本身或者雙重擴折號。

  2. 修正檢測SQL meta-characters的正則表達式: /((\%3D)|(=))[^ ]*((\%27)|(』)|(--)|(\%3B)|(:))/i

    1. 解釋: 這個規則首先留意 = 號或它的hex值(%3D),然後考慮零個或多個除換行符以外的任意字元,最後檢測單引號,雙重破折號或分號。

  3. 典型的 SQL 注入攻擊的正則表達式: /w*((\%27)|(』))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix

    解釋:

    1. w* - 零個或多個字元或者下劃線。

    2. (\%27)|』 - 單引號或它的hex等值。

    3. (\%6 F)|o|(\%4 F))((\%72)|r|-(\%52) -『or』的大小寫以及它的hex等值

  4. 檢測SQL注入,UNION查詢關鍵字的正則表達式: /((\%27)|(』))union/ix

    1. (\%27)|(』) - 單引號和它的hex等值

    2. union - union關鍵字

    3. 可以同樣為其他SQL查詢定製表達式,如 >select, insert, update, delete, drop, 等等.

  5. 檢測MS SQL Server SQL注入攻擊的正則表達式: /exec(s|+)+(s|x)pw+/ix

    1. exec - 請求執行儲存或擴展儲存過程的關鍵字

    2. (s|+)+ - 一個或多個的空白或它們的http等值編碼

    3. (s|x) p- 『sp』或『xp』字母用來辨認儲存或擴展儲存過程

    4. w+ - 一個或多個字元或下劃線來匹配過程的名稱


CSS的檢測也主要是正則表達式:

  • 一般 CSS 攻擊的正則表達式: /((\%3C)|<)((\%2F)|/)*[a-z0-9\%]+((\%3E)|>)/ix

    • 解釋:

    • ((\%3C)|<) -檢查<和它hex等值

    • ((\%2F)|/)*-結束標簽/或它的 hex等值

    • [a-z0-9\%]+ -檢查標簽里的字母或它hex等值

    • ((\%3E)|>) -檢查>或它的hex等值

  • "<img src" CSS 攻擊正則表達式: /((\%3C)|<)((\%69)|i|(\%49))((\%6D)|m|(\%4D))((\%67)|g|(\%47))[^ ]+((\%3E)|>)/I

    • 解釋:

    • (\%3 C)|<) -<或它的hex等值

    • (\%69)|i|(\%49))((\%6D)|m|(\%4D))((\%67)|g|(\%47) -』img』字母或它的大小寫hex等值的變化組合

    • [^ ]+ -除了換行符以外的任何跟隨<img的字元

    • (\%3E)|>) ->或它的hex等值

  • CSS 攻擊的極端的正則表達式 : /((\%3C)|<)[^ ]+((\%3E)|>)/I

    • 解釋:

    • 這個規則簡單尋找<+除換行符外的任何字元+>。由於你的web伺服器和web應用程序的構架,這個規則可能產生一些錯誤。但它能保證捉住任何CCS或者類似CSS的攻擊。

B. asp.net(C#)匹配正則表達,替換所有特殊符號,防止sql注入

防止sql注入,最來簡單的辦法就是不要拼源接sql,而是採用SqlParameter參數化形式,如果條件可能有可能沒有,可以採用:
string sql = "select * from xx where 1=1";
if(true){
sql += " and id=@id";
command.Parameters.Add(new SqlParameter
}

如果非要拼接sql,那麼對於數值型,拼接前判斷下是否數值,
字元串類型拼接前進行str.Replace("'", "''");// 把一個單引號替換為兩個單引號
就可以避免sql注入了

你用正則,效率低,而且成效也不見得好

C. 留言板正則表達防止sql注入

你看你想要什麼的吧 "^\d+$"//非負整數(正整數 + 0)
"^[0-9]*[1-9][0-9]*$"//正整數
"^((-\d+)|(0+))$"//非正整數(負整數 + 0)
"^-[0-9]*[1-9][0-9]*$"//負整數
"^-?\d+$"//整數
"^\d+(\.\d+)?$"//非負浮點數(正浮點數 + 0)
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"//正浮點數
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"//非正浮點數(負浮點數 + 0)
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"//負浮點數
"^(-?\d+)(\.\d+)?$"//浮點數
"^[A-Za-z]+$"//由26個英文字母組成的字元串
"^[A-Z]+$"//由26個英文字母的大寫組成的字元串
"^[a-z]+$"//由26個英文字母的小寫組成的字元串
"^[A-Za-z0-9]+$"//由數字和26個英文字母組成的字元串
"^\w+$"//由數字、26個英文字母或者下劃線組成的字元串
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"//email地址
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"//url

整數或者小數:^[0-9]+\.{0,1}[0-9]{0,2}$
只能輸入數字:"^[0-9]*$"。
只能輸入n位的數字:"^\d{n}$"。
只能輸入至少n位的數字:"^\d{n,}$"。
只能輸入m~n位的數字:。"^\d{m,n}$"
只能輸入零和非零開頭的數字:"^(0|[1-9][0-9]*)$"。
只能輸入有兩位小數的正實數:"^[0-9]+(.[0-9]{2})?$"。
只能輸入有1~3位小數的正實數:"^[0-9]+(.[0-9]{1,3})?$"。
只能輸入非零的正整數:"^\+?[1-9][0-9]*$"。
只能輸入非零的負整數:"^\-[1-9][]0-9"*$。
只能輸入長度為3的字元:"^.{3}$"。
只能輸入由26個英文字母組成的字元串:"^[A-Za-z]+$"。
只能輸入由26個大寫英文字母組成的字元串:"^[A-Z]+$"。
只能輸入由26個小寫英文字母組成的字元串:"^[a-z]+$"。
只能輸入由數字和26個英文字母組成的字元串:"^[A-Za-z0-9]+$"。
只能輸入由數字、26個英文字母或者下劃線組成的字元串:"^\w+$"。
驗證用戶密碼:"^[a-zA-Z]\w{5,17}$"正確格式為:以字母開頭,長度在6~18之間,只能包含字元、數字和下劃線。
驗證是否含有^%&'',;=?$\"等字元:"[^%&'',;=?$\x22]+"。
只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$"
驗證Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
驗證InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
驗證電話號碼:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正確格式為:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
驗證身份證號(15位或18位數字):"^\d{15}|\d{18}$"。
驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"1"~"12"。
驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"和"1"~"31"。整數或者小數:^[0-9]+\.{0,1}[0-9]{0,2}$
只能輸入數字:"^[0-9]*$"。
只能輸入n位的數字:"^\d{n}$"。
只能輸入至少n位的數字:"^\d{n,}$"。
只能輸入m~n位的數字:。"^\d{m,n}$"
只能輸入零和非零開頭的數字:"^(0|[1-9][0-9]*)$"。
只能輸入有兩位小數的正實數:"^[0-9]+(.[0-9]{2})?$"。
只能輸入有1~3位小數的正實數:"^[0-9]+(.[0-9]{1,3})?$"。
只能輸入非零的正整數:"^\+?[1-9][0-9]*$"。
只能輸入非零的負整數:"^\-[1-9][]0-9"*$。
只能輸入長度為3的字元:"^.{3}$"。
只能輸入由26個英文字母組成的字元串:"^[A-Za-z]+$"。
只能輸入由26個大寫英文字母組成的字元串:"^[A-Z]+$"。
只能輸入由26個小寫英文字母組成的字元串:"^[a-z]+$"。
只能輸入由數字和26個英文字母組成的字元串:"^[A-Za-z0-9]+$"。
只能輸入由數字、26個英文字母或者下劃線組成的字元串:"^\w+$"。
驗證用戶密碼:"^[a-zA-Z]\w{5,17}$"正確格式為:以字母開頭,長度在6~18之間,只能包含字元、數字和下劃線。
驗證是否含有^%&'',;=?$\"等字元:"[^%&'',;=?$\x22]+"。
只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$"
驗證Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
驗證InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
驗證電話號碼:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正確格式為:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
驗證身份證號(15位或18位數字):"^\d{15}|\d{18}$"。
驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"1"~"12"。
驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"和"1"~"31"。

熱點內容
丁度巴拉斯情人電影推薦 發布:2024-08-19 09:13:07 瀏覽:886
類似深水的露點電影 發布:2024-08-19 09:10:12 瀏覽:80
《消失的眼角膜》2電影 發布:2024-08-19 08:34:43 瀏覽:878
私人影院什麼電影好看 發布:2024-08-19 08:33:32 瀏覽:593
干 B 發布:2024-08-19 08:30:21 瀏覽:910
夜晚看片網站 發布:2024-08-19 08:20:59 瀏覽:440
台灣男同電影《越界》 發布:2024-08-19 08:04:35 瀏覽:290
看電影選座位追女孩 發布:2024-08-19 07:54:42 瀏覽:975
日本a級愛情 發布:2024-08-19 07:30:38 瀏覽:832
生活中的瑪麗類似電影 發布:2024-08-19 07:26:46 瀏覽:239