.Net防SQL注入代码的实现方法

简介:
对于网站的安全性,是每个网站开发者和运营者最关心的问题。网站一旦出现漏洞,那势必将造成很大的损失。为了提高网站的安全性,首先网站要防注入,最重要的是服务器的安全设施要做到位。    下面说下网站防注入的几点要素。
    一:丢弃SQL语句直接拼接,虽然这个写起来很快很方便。
    二:如果用SQL语句,那就使用参数化,添加Param
    三:尽可能的使用存储过程,安全性能高而且处理速度也快
    四:屏蔽SQL,javascript等注入(很是主要的),对于每个文件写是不太可能的。所以要找到对所有文件起作用的办法。我在网上收集了以下3种方法
    C#防SQL注入方法一
    在Web.config文件中, < appSettings>下面增加一个标签:如下
  1. <
  appSettings >     <  add  key= "safeParameters"  value= "OrderID-int32,CustomerEmail-email,ShippingZipcode-USzip"  />    < /appSettings >  
    其中key是 < saveParameters>后面的值为"OrderId-int32"等,其中"-"前面表示参数的名称比如:OrderId,后面的int32表示数据类型。
     C#防SQL注入方法二
    在Global.asax中增加下面一段:  
  1. protected void Application_BeginRequest(Object sender, EventArgs e){   
  2. String[] safeParameters = System.Configuration.ConfigurationSettings.AppSettings["safeParameters"].ToString().Split(',');   
  3. for(int i= 0 ;i <   safeParameters.Length; i++){   
  4. String parameterName = safeParameters.Split('-')[0];   
  5. String parameterType = safeParameters.Split('-')[1];   
  6. isValidParameter(parameterName, parameterType);   
  7. }   
  8. }   
  9.  
  10. public void isValidParameter(string parameterName, string parameterType){   
  11. string parameterValue = Request.QueryString[parameterName];   
  12. if(parameterValue == nullreturn;   
  13.  
  14. if(parameterType.Equals("int32")){   
  15. if(!parameterCheck.isInt(parameterValue)) Response.Redirect("parameterError.aspx");   
  16. }   
  17. else if (parameterType.Equals("USzip")){   
  18. if(!parameterCheck.isUSZip(parameterValue)) Response.Redirect("parameterError.aspx");   
  19. }   
  20. else if (parameterType.Equals("email")){   
  21. if(!parameterCheck.isEmail(parameterValue)) Response.Redirect("parameterError.aspx");   
  22. }   
  23. }  

     C#防SQL注入方法
    使用字符串过滤类

  1. using System;  
  2.  
  3. namespace web.comm  
  4. {  
  5.     /**//// < summary>  
  6.     /// ProcessRequest 的摘要说明。  
  7.     /// < /summary>  
  8.     public class ProcessRequest  
  9.      {  
  10.         public ProcessRequest()  
  11.          {  
  12.             //  
  13.             // TODO: 在此处添加构造函数逻辑  
  14.             //  
  15.          }  
  16.  
  17.          SQL注入式攻击代码分析#region SQL注入式攻击代码分析  
  18.         /**//// < summary>  
  19.         /// 处理用户提交的请求  
  20.         /// < /summary>  
  21.         public static void StartProcessRequest()  
  22.          {  
  23.                
  24. //             System.Web.HttpContext.Current.Response.Write("< script>alert('dddd');< /script>");  
  25.             try 
  26.              {  
  27.                 string getkeys = "";  
  28.                 //string sqlErrorPage = System.Configuration.ConfigurationSettings.AppSettings["CustomErrorPage"].ToString();  
  29.                 if (System.Web.HttpContext.Current.Request.QueryString != null)  
  30.                  {  
  31.        
  32.                     for(int i=0;i< System.Web.HttpContext.Current.Request.QueryString.Count;i++)  
  33.                      {  
  34.                          getkeys = System.Web.HttpContext.Current.Request.QueryString.Keys;  
  35.                         if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys],0))  
  36.                          {  
  37.                             //System.Web.HttpContext.Current.Response.Redirect (sqlErrorPage+"?errmsg=sqlserver&sqlprocess=true");  
  38.                              System.Web.HttpContext.Current.Response.Write("< script>alert('请勿非法提交!');history.back();< /script>");  
  39.                              System.Web.HttpContext.Current.Response.End();  
  40.                          }  
  41.                      }  
  42.                  }  
  43.                 if (System.Web.HttpContext.Current.Request.Form != null)  
  44.                  {  
  45.                     for(int i=0;i< System.Web.HttpContext.Current.Request.Form.Count;i++)  
  46.                      {  
  47.                          getkeys = System.Web.HttpContext.Current.Request.Form.Keys;  
  48.                         if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys],1))  
  49.                          {  
  50.                             //System.Web.HttpContext.Current.Response.Redirect (sqlErrorPage+"?errmsg=sqlserver&sqlprocess=true");  
  51.                              System.Web.HttpContext.Current.Response.Write("< script>alert('请勿非法提交!');history.back();< /script>");  
  52.                              System.Web.HttpContext.Current.Response.End();  
  53.                          }  
  54.                      }  
  55.                  }  
  56.              }  
  57.             catch 
  58.              {  
  59.                 // 错误处理: 处理用户提交信息!  
  60.              }  
  61.          }  
  62.         /**//// < summary>  
  63.         /// 分析用户请求是否正常  
  64.         /// < /summary>  
  65.         /// < param name="Str">传入用户提交数据< /param>  
  66.         /// < returns>返回是否含有SQL注入式攻击代码< /returns>  
  67.         private static bool ProcessSqlStr(string Str,int type)  
  68.          {  
  69.             string SqlStr;  
  70.  
  71.             if(type == 1)  
  72.                  SqlStr = "exec |insert |select |delete |update |count |chr |mid |master |truncate |char |declare ";  
  73.             else 
  74.                  SqlStr = "'|and|exec|insert|select|delete|update|count|*|chr|mid|master|truncate|char|declare";  
  75.  
  76.             bool ReturnValue = true;  
  77.             try 
  78.              {  
  79.                 if (Str != "")  
  80.                  {  
  81.                     string[] anySqlStr = SqlStr.Split('|');  
  82.                     foreach (string ss in anySqlStr)  
  83.                      {  
  84.                         if (Str.IndexOf(ss)>=0)  
  85.                          {  
  86.                              ReturnValue = false;  
  87.                          }  
  88.                      }  
  89.                  }  
  90.              }  
  91.             catch 
  92.              {  
  93.                  ReturnValue = false;  
  94.              }  
  95.             return ReturnValue;  
  96.          }  
  97.          #endregion  
  98.  
  99.      }  


     本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1360776,如需转载请自行联系原作者



相关文章
|
1月前
|
SQL 监控 安全
SQL注入的实现原理以及防止
SQL注入的实现原理以及防止
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
65 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
1月前
|
SQL Java 应用服务中间件
Java项目防止SQL注入的四种方案
Java项目防止SQL注入的四种方案
39 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
101 1
|
30天前
|
SQL 存储 BI
sql server 2012远程链接的方法及步骤
sql server 2012远程链接的方法及步骤
17 1
|
2天前
|
SQL 分布式计算 资源调度
一文解析 ODPS SQL 任务优化方法原理
本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。
|
6天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
14 0
|
14天前
|
SQL 安全 PHP
CTF--Web安全--SQL注入之Post-Union注入
CTF--Web安全--SQL注入之Post-Union注入
|
30天前
|
SQL 存储 Kubernetes
Seata常见问题之mybatisplus的批量插入方法报SQL错误如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
26 0
|
1月前
|
SQL XML Java
整理几个常用的sql和其他代码
整理几个常用的sql和其他代码
12 1