none
mschart与全局应用程序不兼容 RRS feed

  • 问题

  • 在页面中我用了mschart做图标统计图,同时我在global.asax中写了防止sql注入验证的语句,但是这样一写后,mschart图标就显示不了了,总是显示一个红叉叉,如果把global.asax文件删掉后就又可以显示了!请问这是为什么?该如何解决这个问题
    2010年11月21日 9:23

答案

  • 总觉得像是 StartRequest 方法的问题,如果当 WebImage.axd 的 URL 包含一些敏感词就会被 SQL 注入检查过滤掉,导航至 SqlErrorPage 页并立即终止 Response,这样的话就可能导致浏览器直接显示一个叉。您可以在这个叉上面单击鼠标右键,选择属性看看它的 URL 到底是什么。
    Mark Zhou
    2010年11月24日 9:05

全部回复

  • 代码贴出来看看,光这样描述不好判断。
    Mark Zhou
    2010年11月21日 17:04
  • 这是global.asax的代码:<%@ Application Language="C#" %>

    <script runat="server">

        void Application_Start(object sender, EventArgs e)
        {
            //在应用程序启动时运行的代码
           
        }
       
        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,则不会引发该事件。

        }
       
        void Application_BeginRequest(object sender,EventArgs e)
        {
            StartRequest();
        }

        private bool ProcessSqlStr(string Str)
        {
            bool ReturnValue = true;
            if (Str != null)
            {
                try
                {
                    if(Str.Trim()!= "")
                    {
                        string SqlStr = "exec|insert|select|delete|master|update|truncate|declare|cmd|or|char|and|join|'|--";
                        string[] anySqlStr = SqlStr.Split('|');
                        foreach (string ss in anySqlStr)
                        {
                            if (!Str.ToLower().Contains("updatepanel"))
                            {
                                if (Str.ToLower().IndexOf(ss) >= 0)
                                {
                                    ReturnValue = false;
                                    break;
                                }
                            }
                        }
                    }
                }
                catch
                {
                    ReturnValue = false;
                }
            }
            return ReturnValue;
        }
       
        private void StartRequest()
        {
            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 (getkeys == "_VIEWSTATE") continue;
                        if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys].ToString()))
                        {
                            System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage);
                            System.Web.HttpContext.Current.Response.End();
                        }
                    }
                }
                if (System.Web.HttpContext.Current.Request.Form != null)
                {
                    for (int k = 0; k < System.Web.HttpContext.Current.Request.Form.Count; k++)
                    {
                        getkeys = System.Web.HttpContext.Current.Request.Form[k].ToString();
                        if (getkeys == "_VIEWSTATE") continue;
                        if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys].ToString()))
                        {
                            System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage);
                            System.Web.HttpContext.Current.Response.End();
                        }
                    }
                }
            }
            catch
            {
                
            }
        }
    </script>
    麻烦你帮我看看,接触.net没多久,先谢谢了!

    2010年11月23日 11:03
  • 总觉得像是 StartRequest 方法的问题,如果当 WebImage.axd 的 URL 包含一些敏感词就会被 SQL 注入检查过滤掉,导航至 SqlErrorPage 页并立即终止 Response,这样的话就可能导致浏览器直接显示一个叉。您可以在这个叉上面单击鼠标右键,选择属性看看它的 URL 到底是什么。
    Mark Zhou
    2010年11月24日 9:05
  • 确实是这个问题,图片的URL中包含一个char字符串,而我的过滤字符串中也有这个,所以就被过滤掉了,显示不出来了!太感谢你了!
    2010年11月29日 0:55