其实ASP.NET C# , SQL 2005 是不是已经有防止SQL注入机制?我看了很久很久,通常是指asp ,是不是我误会了吗????

解决方案 »

  1.   

    自己建立个简单的aspx表单,实际注入一下看看行不行不就知道咯
      

  2.   

    只要是sql语句组装,难免会被注入的;asp的话使用存储过程
      

  3.   

    聽說 where 特別容易注入 , 是嗎 ???
      

  4.   

    這樣有效嗎 ???
    asp.net程序防止sql注入收藏方式一如下:将下面的代码加入到Global.asax文件中:   
        ///<summary>
        ///防止SQL注入
        ///</summary>
        ///<param name="sender"></param>
        ///<param name="e"></param>
        void Application_BeginRequest(Object sender, EventArgs e)
        {
            StartProcessRequest();
     
        }#region SQL注入式攻击代码分析
        ///<summary>
        ///处理用户提交的请求
        ///</summary>
        private void StartProcessRequest()
        {
            try
            {
                string getkeys = "";
                string sqlErrorPage = "error.aspx";//转向的错误提示页面
                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]))
                        {
                            System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage);
                            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 (getkeys == "__VIEWSTATE") continue;
                        if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys]))
                        {
                            System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage);
                            System.Web.HttpContext.Current.Response.End();
                        }
                    }
               }
            }
            catch
            {
                // 错误处理: 处理用户提交信息!
            }
        }
        ///<summary>
        ///分析用户请求是否正常
        ///</summary>
        ///<param name="Str">传入用户提交数据 </param>
        ///<returns>返回是否含有SQL注入式攻击代码 </returns>
        private bool ProcessSqlStr(string Str)
        {
            bool ReturnValue = true;
            try
            {
                if (Str.Trim() != "")
                {
                    string SqlStr = "and .exec .insert .select .delete .update .count .* .chr .mid .master .truncate .char .declare";
     
                    string[] anySqlStr = SqlStr.Split('.');
                    foreach (string ss in anySqlStr)
                    {
                        if (Str.ToLower().IndexOf(ss) >= 0)
                        {
                            ReturnValue = false;
                            break;
                        }
                    }
                }
            }
            catch
            {
                ReturnValue = false;
            }
            return ReturnValue;
        }
        #endregion
    方法二如下:在App_Code文件夹中加一个类SqlZr.cs 其内容如下
     
    public class SqlZr
    {
         public SqlZr()
         {
             //
             // TODO: 在此处添加构造函数逻辑
             //
         }
        public static string DelSQLStr(string str)
        {
            if (str == null || str == "")
                return "";
            str = str.Replace(";", "");
            str = str.Replace("'", "");
            str = str.Replace("&", "");
            str = str.Replace("%20", "");
            str = str.Replace("--", "");
            str = str.Replace("==", "");
            str = str.Replace("<", "");
            str = str.Replace(">", "");
            str = str.Replace("%", "");
            str = str.Replace("+", "");
            str = str.Replace("-", "");
            str = str.Replace("=", "");
            str = str.Replace(",", "");
            return str;
        }
    }
     
    再将所有项目中的Request.QueryString["id"]改为:
    SqlZr.DelSQLStr(Request.QueryString["id"])即可。
      

  5.   

    需要自己解决的
    利用sqlparameter可以防注
      

  6.   

     
    【autocode代码生成器】 全面支持自动生成 java 标准代码! 
    全面支持自动生成 struts1.2 标准代码! 
    全面支持自动生成 ASP.NET 标准代码! 全面支持当今流行的三大主流开发架构 
    同时欢迎大家有空关注我们的QQ空间 http://915842778.qzone.qq.com/ 需要的朋友可以到天空软件园(www.skycn.com) 、华军软件园(www.newhua.com)、CSDN社区( www.csdn.net)下载使用 
    (注:在其网站的软件搜索里输入 “autocode” 即可查询出autocode代码生成器来供大家下载的地址咯) autocode代码生成器各个版本自动生成代码的特点:--== 1 .【 JAVA版 】具体自动生成的内容如下:     ★ VO、POJO对象 
        ★ DAO接口 
        ★ IMPL接口实现类 
        ★ DAO工厂 
        ★ VO、POJO工厂 
        ★ DBC数据库连接管理类,数据库事务处理机制 
        ★ Servlet业务处理及其配置文件 
        ★ JSP调用页面(增、删、改、查),分页功能自动实现  
    2 .【 Struts1.2 版 】具体自动生成的内容如下: 
          ★ VO、POJO对象 
          ★ DAO接口 
          ★ IMPL接口实现类 
          ★ DAO工厂 
          ★ VO、POJO工厂 
          ★ DBC数据库连接管理类,数据库事务处理机制 
          ★ EncodingFilter 处理中文乱码的编码过滤器 
          ★ Action、Form、struts-config.xml web.xml struts的处理核心类及配置文件 
          ★ JSP调用页面(全面支持struts1.2)(增、删、改、查),分页功能自动实现 
            (如果数据库是sqlserver,又需要分页的,请使用sqlserver2005) 
    3 .【 ASP.NET版 】具体自动生成的内容如下: 
        ★ VO、POJO对象 
        ★ DAO接口 
        ★ IMPL接口实现类 
        ★ DAO工厂 
        ★ VO、POJO工厂 
        ★ DBC数据库连接管理类,数据库事务管理机制 
        ★ ASPX调用页面(增、删、改、查)(含.CS文件),分页功能自动实现 
        ★ Web.Config配置文件(VS2005工程需要的文件)  
    4、特色: 
          ☆ 一键生成,简洁使用。 
          ☆ 生成的代码全部开源,没有任何通过插件或链接库来做的操作。 
          ☆ 支持多表的多主键处理。 
          ☆ 支持数据事务的操作。 
          ☆ 生成内容可以依据客户的需要来选择性的生成。 
          ☆ 支持自定义查询接口的生成,用户可以定义查询条件。 
          ☆ 生成的jsp、Servlet、Action、Asp.net 完全处理好了精度字段的精度及显示处理。 
          ☆ 目前支持Oracle、Sqlserver 数据库对象的自动生成代码。 
      

  7.   

    没有绝对安全,只有相对安全
    尽量不要在页面里写SQL语句,用存储过程吧