不過是java開發還是C#開發或者PHP的開發中,都需要關註SQL註入攻擊的安全性問題,為了保證客戶端提交過來的數據不會產生SQL註入的風險,我們需要對接收的數據進行危險字元過濾來防範SQL註入攻擊的危險,以下是C#防止SQL註入攻擊的一個危險字元過濾函數,過濾掉相應的資料庫關鍵字。 主要過濾兩類字 ...
不過是java開發還是C#開發或者PHP的開發中,都需要關註SQL註入攻擊的安全性問題,為了保證客戶端提交過來的數據不會產生SQL註入的風險,我們需要對接收的數據進行危險字元過濾來防範SQL註入攻擊的危險,以下是C#防止SQL註入攻擊的一個危險字元過濾函數,過濾掉相應的資料庫關鍵字。
主要過濾兩類字元:(1)一些SQL中的標點符號,如@,*以及單引號等等;(2)過濾資料庫關鍵字select、insert、delete from、drop table、truncate、mid、delete、update、truncate、declare、master、script、exec、net user、drop等關鍵字或者關鍵詞。
封裝好的方法如下:
public static string ReplaceSQLChar(string str) { if (str == String.Empty) return String.Empty; str = str.Replace("'", ""); str = str.Replace(";", ""); str = str.Replace(",", ""); str = str.Replace("?", ""); str = str.Replace("<", ""); str = str.Replace(">", ""); str = str.Replace("(", ""); str = str.Replace(")", ""); str = str.Replace("@", ""); str = str.Replace("=", ""); str = str.Replace("+", ""); str = str.Replace("*", ""); str = str.Replace("&", ""); str = str.Replace("#", ""); str = str.Replace("%", ""); str = str.Replace("$", ""); //刪除與資料庫相關的詞 str = Regex.Replace(str, "select", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "insert", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "delete from", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "count", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "drop table", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "truncate", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "asc", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "mid", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "char", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "xp_cmdshell", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "exec master", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "net localgroup administrators", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "and", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "net user", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "or", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "net", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "-", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "delete", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "drop", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "script", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "update", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "and", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "chr", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "master", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "truncate", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "declare", "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "mid", "", RegexOptions.IgnoreCase); return str; }
備註:原文轉載自C#防SQL註入過濾危險字元信息_IT技術小趣屋。