c#如何防止sql注入?
导读:收集整理的这篇文章主要介绍了c#如何防止sql注入?,觉得挺不错的,现在分享给大家,也给大家做个参考。对于网站的安全性,是每个网站开发者和运营者最关心的问题。网站一旦出现漏洞,那势必将造成很大的损失。为了提高网站的安全性,首先网站要防注入。...
收集整理的这篇文章主要介绍了c#如何防止sql注入?,觉得挺不错的,现在分享给大家,也给大家做个参考。对于网站的安全性,是每个网站开发者和运营者最关心的问题。网站一旦出现漏洞,那势必将造成很大的损失。为了提高网站的安全性,首先网站要防注入。下面我们给大家介绍C#防止SQL注入的几种方法:
方法一:
在Web.config文件下面增加一个如下标签:
appSettings>
add key="safeParameters" value="OrderID-int32,CustomerEmail-email,ShippingZipcode-USzip" />
/appSettings>
其中key是 saveParameters> 后面的值为”OrderId-int32”等,其中”-“前面表示参数的名称比如:OrderId,后面的int32表示数据类型。
方法二:
在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"); }
}
方法三:
使用字符串过滤类
/**//// 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#教程》
以上就是c#如何防止sql注入?的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: c#如何防止sql注入?
本文地址: https://pptw.com/jishu/593600.html
