[C#基本防護] 預防SQL隱碼攻擊函式

  • 8357
  • 0
  • C#
  • 2010-09-08

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(" ", "");    
        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     }

 

置於公用函數資料夾下,便可經常叫用囉,這只是基本防護,並非完全,僅供學習參考,往後我會繼續分享其它防止SQL攻擊的語法給大家。

 

附上SQL Injection 資料參考 :http://www.microsoft.com/taiwan/sql/sql_injection_g1.htm

 

NOTE : 9/8  Allen 大給了我一些建議,在此做個補充,本篇心得文旨在讓這方面的初學者們能夠了解隱藏這些字碼的意義,還有哪些字碼需要被隔離,如要直接使用會造成一些文字處理上的困擾,可以修改過後方能使用,日後我會在整理一份實用性較強的給大家參考。

 

分享


站作網站設計工作室 SiteMak Studio
Shinyo Ho 
Founder / Developer
email:shinyo.her@gmail.com|web:www.sitemak.com.tw