zoukankan      html  css  js  c++  java
  • .net防止SQL注入的方法

    最近sql注入数据库被更改泛滥,我的好多NET+SQL的系统都出现了注入问题,郁闷了好几天,目前被注入最流行的JS代码,库表里补追加了N多如:"</title><script src=http://XXXXXXX/107/1.js> </script> <”的字段,导致WEB页面无法正常使用,在网上找了不少的防注入过滤敏感语句代码,这个觉得方便点,仅供参参。
    1。给项目添加一个全局应用程序类Global.asax文件,代码如下:
    程序代码 程序代码
    <%@ Application Language="C#" %>

    <script runat="server">

        void Application_Start(object sender, EventArgs e)
        {
            // 在应用程序启动时运行的代码
            StartProcessRequest();
        }
        
        void Application_End(object sender, EventArgs e)
        {
            //  在应用程序关闭时运行的代码

        }
            
        void Application_Error(object sender, EventArgs e)
        {
            // 在出现未处理的错误时运行的代码

        }

        void Session_Start(object sender, EventArgs e)
        {
            // 在新会话启动时运行的代码

        }

        void Session_End(object sender, EventArgs e)
        {
            // 在会话结束时运行的代码。
            // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
            // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
            // 或 SQLServer,则不会引发该事件。

        }

        #region SQL注入式攻击代码分析
        ///  <summary>
        /// 处理用户提交的请求
        ///  </summary>
        private void StartProcessRequest()
        {
            try
            {
                string getkeys = "";
                string sqlErrorPage = "../default.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
          
    </script>



    2。利用SqlCommand传参数的方法
    程序代码 程序代码
    String StrSql="select * from admin where user_id=@id";
    SqlCommand cmd=new SqlCommand();
    cmd.CommandText=StrSql;
    cmd.Parameters.Add("@id",SqlDbType.VarChar,20).Value=Request["id"].ToString();
  • 相关阅读:
    (Linux基础学习)第五章:Linux中的screen应用
    (Linux基础学习)第四章:Linux系统中的日期和时间介绍和ntpdate命令
    (Linux基础学习)第三章:terminal与shell的简介和修改命令提示符颜色
    (Linux基础学习)第二章:CentOS7.4安装教程
    (Linux基础学习)第一章:科普和Linux系统安装
    Linux基础入门 第一章:Linux环境搭建——Redhat 6.4图文安装教程
    结合Zabbix与Ansible打造自动化数据库监控体系
    Jenkins Tomcat 环境搭建
    SVN 服务器的搭建
    Dockerfile 创建redis容器
  • 原文地址:https://www.cnblogs.com/Bany/p/1755481.html
Copyright © 2011-2022 走看看