当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP教程:防SQL注入

ASP.NET
在C#中导入WebBrowser控件,生成具有强名称的程序集
Asp.Net中的脚本回调和Server.Transfer页面传值
暂时性的解决datagrid控件数据绑定时候xxx字段不属于xxx表的错误
http://www.donews.net/yangwl/archive/2004/10/17/136872.aspx
Some tips for using visual studio .net
Grasshopper简介(节选)
ORACLE 常用的SQL语法和数据对象
[DNN学习所得]让IE也能实现解压缩功能(提供演示源码下载)
学习笔记之Microsoft Windows服务
关于XML:以对象模型为中心
P&P Enterprise Library Extensions
简易的字符替换,可以用于用户自我介绍输入框,简单新闻回复& etc.
缩略图多路径多格式保存
"关机/休眠/重启/注销"的类
[DNN功能]自己动手做语言包
处理WinForm多线程程序时的陷阱
获得光标在多行textbox中的行与列的函数
ADO.NET 和 ADO 的比较
vb.net类的封装,继承,多态,抽象之一
Display XML in AxSHDocVw.AxWebBrowser

ASP.NET 中的 ASP教程:防SQL注入


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 262 ::
收藏到网摘: n/a

防SQL 注入是一个系统工程,在项目开发中就要系统的考虑SQL 注入的问题。一般做到以下4点,能比较好的控制SQL 注入:

  1. 严格验证用户的一切输入,包括URL参数。
  2. 将用户登录名称、密码等数据加密保存
  3. 不要用拼接字符串的方式来生成SQL语句,而是用SQL Parameters 传参数或者用存储过程来查询
  4. 严格验证上传文件的后缀,exe、aspx、asp等可执行程序禁止上传。

这里介绍一个简单通用的方法,用来验证字符串中是否有敏感字符,参数可以是一个字符串,也可以是一个字符串集合,敏感字符可以在Lawlesses数组中定义:

  1.         public static string[] Lawlesses = { "=", "'" };
  2.         /// <summary>
  3.         /// 敏感字符检测
  4.         /// </summary>
  5.         /// <param name="args"></param>
  6.         /// <returns></returns>
  7.         public static bool CheckParams(params object[] args)
  8.         {
  9.             if (Lawlesses == null || Lawlesses.Length <= 0) return true;
  10.             //构造正则表达式,例:Lawlesses是=号和'号,则正则表达式为 .*[=}'].*
  11.             //另外,由于我是想做通用而且容易修改的函数,所以多了一步由字符数组到正则表达式,实际使用中,直接写正则表达式亦可;
  12.             string str_Regex = ".*[";
  13.             for (int i = 0; i < Lawlesses.Length - 1; i++)
  14.             {
  15.                 str_Regex += Lawlesses[i] + "|";
  16.             }
  17.             str_Regex += Lawlesses[Lawlesses.Length - 1] + "].*";
  18.             //
  19.             foreach (object arg in args)
  20.             {
  21.                 if (arg is string)//如果是字符串,直接检查
  22.                 {
  23.                     if (Regex.Matches(arg.ToString(), str_Regex).Count > 0)
  24.                         return false;
  25.                 }
  26.                 else if (arg is ICollection)//如果是一个集合,则检查集合内元素是否字符串,是字符串,就进行检查
  27.                 {
  28.                     foreach (object obj in (ICollection)arg)
  29.                     {
  30.                         if (obj is string)
  31.                         {
  32.                             if (Regex.Matches(obj.ToString(), str_Regex).Count > 0)
  33.                                 return false;
  34.                         }
  35.                     }
  36.                 }
  37.             }
  38.             return true;
  39.         }