웹사이트의 보안은 모든 웹사이트 개발자와 운영자의 가장 큰 관심사입니다. 웹사이트에 취약점이 발생하면 필연적으로 큰 손실이 발생합니다. 웹사이트의 보안을 강화하기 위해서는 먼저 웹사이트를 해킹으로부터 보호해야 합니다.
이제 C#에서 SQL 삽입을 방지하는 여러 가지 방법을 소개하겠습니다.
방법 1:
Web.config 파일 아래에 다음 태그를 추가하세요.
< appSettings> < add key="safeParameters" value="OrderID-int32,CustomerEmail-email,ShippingZipcode-USzip" /> < /appSettings>
키는 < saveParameters> ;다음 값은 "OrderId-int32" 등입니다. 여기서 앞의 "-"는 매개변수의 이름을 나타냅니다(예: OrderId). 다음 int32는 데이터 유형을 나타냅니다.
방법 2:
Global.asax에 다음 단락 추가:
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"); } }
방법 3:
문자열 필터 클래스 사용
/**//// < 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 } }
권장 관련 비디오 자습서: "C# Tutorial"
위 내용은 C#에서 SQL 주입을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!