网站地图    收藏   

主页 > 后端 > 网站安全 >

C#防SQL注入代码的实现方法 - 网站安全 - 自学ph

来源:自学PHP网    时间:2015-04-16 23:14 作者: 阅读:

[导读] 对于网站的安全性,是每个网站开发者和运营者最关心的问题。网站一旦出现漏洞,那势必将造成很大的损失。为了提高网站的安全性,首先网站要防注入,最重要的是服务器的安全设...

 对于网站的安全性,是每个网站开发者和运营者最关心的问题。网站一旦出现漏洞,那势必将造成很大的损失。为了提高网站的安全性,首先网站要防注入,最重要的是服务器的安全设施要做到位。 
下面说下网站防注入的几点要素。 
一:丢弃SQL语句直接拼接,虽然这个写起来很快很方便。 
二:如果用SQL语句,那就使用参数化,添加Param 
三:尽可能的使用存储过程,安全性能高而且处理速度也快 
四:屏蔽SQL,javascript等注入(很是主要的),对于每个文件写是不太可能的。所以要找到对所有文件起作用的办法。我在网上收集了以下3种方法 
C#防SQL注入方法一 
在Web.config文件中, < appSettings>下面增加一个标签:如下 

< appSettings> 
< add key="safeParameters" value="OrderID-int32,CustomerEmail-email,ShippingZipcode-USzip" /> 
< /appSettings> 


其中key是 < saveParameters>后面的值为"OrderId-int32"等,其中"-"前面表示参数的名称比如:OrderId,后面的int32表示数据类型。 
C#防SQL注入方法二 www.yztrans.com 
在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"); 
} 
} 


 

C#防SQL注入方法三 
使用字符串过滤类 
using System; 
namespace web.comm 
{ 
/**//// < summary> 
/// ProcessRequest 的摘要说明。 
/// < /summary> 
public class ProcessRequest 
{ 
public ProcessRequest() 
{ 
// 
// TODO: 在此处添加构造函数逻辑 
// 
} 
SQL注入式攻击代码分析#region SQL注入式攻击代码分析 
/**//// < 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 
} 
}​

 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论