Heim > Artikel > Backend-Entwicklung > Wie kann man SQL-Injection in C# verhindern?
Website-Sicherheit ist das größte Anliegen jedes Website-Entwicklers und -Betreibers. Sobald eine Schwachstelle auf der Website vorhanden ist, führt dies unweigerlich zu großen Verlusten. Um die Sicherheit der Website zu verbessern, muss die Website zunächst vor Injektionen geschützt werden.
Hier stellen wir Ihnen verschiedene Möglichkeiten vor, um SQL-Injection in C# zu verhindern:
Methode eins:
Fügen Sie das folgende Tag unter der Web.config-Datei hinzu:
< appSettings> < add key="safeParameters" value="OrderID-int32,CustomerEmail-email,ShippingZipcode-USzip" /> < /appSettings>
Der Schlüssel ist 403c6cc3e9e4261fe0da1b089a4e2ef5 und der Wert danach ist „OrderId-int32“ usw., wobei „-“ Der Name vorne gibt die Parameter an, z. B. OrderId, und int32 dahinter gibt den Datentyp an.
Methode 2:
Fügen Sie den folgenden Absatz in Global.asax hinzu:
protected void Application_BeginRequest(Object sender, EventArgs e){ String[] safeParameters = System.Configuration.ConfigurationSettings.AppSettings["safeParameters"].ToString()。Split(','); for(int i= 0 ;i < safeParameters.Length; i++){ String parameterName = safeParameters[i].Split('-')[0]; String parameterType = safeParameters[i].Split('-')[1]; isValidParameter(parameterName, parameterType); } } public void isValidParameter(string parameterName, string parameterType){ string parameterValue = Request.QueryString[parameterName]; if(parameterValue == null) return; if(parameterType.Equals("int32")){ if(!parameterCheck.isInt(parameterValue)) Response.Redirect("parameterError.aspx"); } else if (parameterType.Equals("USzip")){ if(!parameterCheck.isUSZip(parameterValue)) Response.Redirect("parameterError.aspx"); } else if (parameterType.Equals("email")){ if(!parameterCheck.isEmail(parameterValue)) Response.Redirect("parameterError.aspx"); } }
Methode 3:
String-Filterungsklasse verwenden
/**//// < summary> /// 处理用户提交的请求 /// < /summary> public static void StartProcessRequest() { // System.Web.HttpContext.Current.Response.Write("< script>alert('dddd');< /script>"); try { string getkeys = ""; //string sqlErrorPage = System.Configuration.ConfigurationSettings.AppSettings["CustomErrorPage"].ToString(); if (System.Web.HttpContext.Current.Request.QueryString != null) { for(int i=0;i< System.Web.HttpContext.Current.Request.QueryString.Count;i++) { getkeys = System.Web.HttpContext.Current.Request.QueryString.Keys[i]; if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys],0)) { //System.Web.HttpContext.Current.Response.Redirect (sqlErrorPage+"?errmsg=sqlserver&sqlprocess=true"); System.Web.HttpContext.Current.Response.Write("< script>alert('请勿非法提交!');history.back();< /script>"); System.Web.HttpContext.Current.Response.End(); } } } if (System.Web.HttpContext.Current.Request.Form != null) { for(int i=0;i< System.Web.HttpContext.Current.Request.Form.Count;i++) { getkeys = System.Web.HttpContext.Current.Request.Form.Keys[i]; if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys],1)) { //System.Web.HttpContext.Current.Response.Redirect (sqlErrorPage+"?errmsg=sqlserver&sqlprocess=true"); System.Web.HttpContext.Current.Response.Write("< script>alert('请勿非法提交!');history.back();< /script>"); System.Web.HttpContext.Current.Response.End(); } } } } catch { // 错误处理: 处理用户提交信息! } } /**//// < summary> /// 分析用户请求是否正常 /// < /summary> /// < param name="Str">传入用户提交数据< /param> /// < returns>返回是否含有SQL注入式攻击代码< /returns> private static bool ProcessSqlStr(string Str,int type) { string SqlStr; if(type == 1) SqlStr = "exec |insert |select |delete |update |count |chr |mid |master |truncate |char |declare "; else SqlStr = "'|and|exec|insert|select|delete|update|count|*|chr|mid|master|truncate|char|declare"; bool ReturnValue = true; try { if (Str != "") { string[] anySqlStr = SqlStr.Split('|'); foreach (string ss in anySqlStr) { if (Str.IndexOf(ss)>=0) { ReturnValue = false; } } } } catch { ReturnValue = false; } return ReturnValue; } #endregion } }
Empfohlene verwandte Video-Tutorials: „C#-Tutorial“
Das obige ist der detaillierte Inhalt vonWie kann man SQL-Injection in C# verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!