SQL Injection基本防護函式
以前在製作網站的時候,常常因為趕CASE,忽略掉一些基本的防護,造成許多無法挽回的意外。
今天要分享一個函式,可以幫你過濾掉SQL隱碼攻擊的可能字串,可以用於網站任何可讓用戶端輸入的TEXTBOX或任何的Request動作前,SQL隱碼攻擊即是傳說中的SQL Injection,至於它是如何攻擊的在此不多作解釋。
01 // CleanSQL() 清除字串中有 SQL 隱碼攻擊的字串 「'」「 」「;」「--」 「|」「\t」「\n」
02 public string CleanSQL(string mString)
03 {
04 if (mString == null)
05 mString = "";
06 else
07 {
08 mString = mString.Replace("'", "''");
09 mString = mString.Replace(" ", "");
02 public string CleanSQL(string mString)
03 {
04 if (mString == null)
05 mString = "";
06 else
07 {
08 mString = mString.Replace("'", "''");
09 mString = mString.Replace(" ", "");
mString = mString.Replace(";", "");
10 mString = mString.Replace("--", "");
11 mString = mString.Replace("|", "");
12 mString = mString.Replace("\t", "");
13 mString = mString.Replace("\n", ""); }
14 return mString;
15 }
16
17 // CheckSQL() 檢查字串中有 SQL 隱碼攻擊的字串 「'」「;」「--」「|」「\t」「\n」
18 public bool CheckSQL(string mString)
19 {
20 bool mfg = false;
21
22 if (mString == null)
23 mfg = true;
24 else
25 {
26 mfg = (mString.Contains("'")
27 || mString.Contains(" ")
28 || mString.Contains(";")
29 || mString.Contains("--")
30 || mString.Contains("|")
31 || mString.Contains("\t")
32 || mString.Contains("\n"));
33 }
34
35 return mfg;
36 }
10 mString = mString.Replace("--", "");
11 mString = mString.Replace("|", "");
12 mString = mString.Replace("\t", "");
13 mString = mString.Replace("\n", ""); }
14 return mString;
15 }
16
17 // CheckSQL() 檢查字串中有 SQL 隱碼攻擊的字串 「'」「;」「--」「|」「\t」「\n」
18 public bool CheckSQL(string mString)
19 {
20 bool mfg = false;
21
22 if (mString == null)
23 mfg = true;
24 else
25 {
26 mfg = (mString.Contains("'")
27 || mString.Contains(" ")
28 || mString.Contains(";")
29 || mString.Contains("--")
30 || mString.Contains("|")
31 || mString.Contains("\t")
32 || mString.Contains("\n"));
33 }
34
35 return mfg;
36 }
置於公用函數資料夾下,便可經常叫用囉,這只是基本防護,並非完全,僅供學習參考,往後我會繼續分享其它防止SQL攻擊的語法給大家。
附上SQL Injection 資料參考 :http://www.microsoft.com/taiwan/sql/sql_injection_g1.htm
NOTE : 9/8 Allen 大給了我一些建議,在此做個補充,本篇心得文旨在讓這方面的初學者們能夠了解隱藏這些字碼的意義,還有哪些字碼需要被隔離,如要直接使用會造成一些文字處理上的困擾,可以修改過後方能使用,日後我會在整理一份實用性較強的給大家參考。
|