asp.net C# 全站防注入 利用Global.asax(转)
全站防注入通用程序
在站点根目录下建立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,则不会引发该事件。
}
    /// <summary>    
    ///  替换所有注入的字符串,并记录注入时的信息     
    /// </summary>     
    /// <param name="sender"></param>     
    /// <param name="e"></param>     
    void Application_BeginRequest(object sender, EventArgs e)     
    {     
  // * * * * * * * * * * * * * * * * * * * * * * * *     
  // 全局防注入     
  // Author:依依秋寒     
  // * * * * * * * * * * * * * * * * * * * * * * * *
        //在接收到一个应用程序请求时触发。    
        string[] KeyWords = new string[] { ";", "'", "--", "xp_", "XP_", "xP_", "Xp_" };     
        string[] safeKeys = ";|'|--|xp_|XP_|xP_|Xp_".Split('|');     
        string QueryString = Server.UrlDecode(Request.QueryString.ToString());     
        string url = Request.Url.AbsolutePath;     
        //排除的扩展名     
        string[] dotFileName = url.Split('.');     
        string dotName = dotFileName[dotFileName.Length - 1];     
        dotFileName = new string[] { "axd" };     
        //出现被排除的扩展名时,直接退出     
        foreach (string str in dotFileName)     
        {     
            if (str == dotName)     
                return;     
        }     
        for(int i=0;i<KeyWords.Length ;i++)     
        {     
            string key = KeyWords[i];     
            if (QueryString.Contains(key))     
            {     
                //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *     
                //记录注入时的信息     
                //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *     
                string IntoRecord = System.DateTime.Now.ToString();     
                IntoRecord += " " + Request.Url.Host;     
                IntoRecord += " " + Request.RequestType;     
                IntoRecord += " " + Request.Url.AbsolutePath;     
                IntoRecord += " " + Server.UrlDecode(Request.QueryString.ToString());     
                IntoRecord += " " + Request.UserHostAddress;     
                IntoRecord += " " + Request.UserAgent;     
                IntoRecord += "\r";
                try    
                {     
                    string path = Server.MapPath(@"/_IntoRecordLog/");     
                    if (!System.IO.Directory.Exists(path))     
                        System.IO.Directory.CreateDirectory(path);     
                    System.IO.File.AppendAllText(path + DateTime.Now.ToString("yyyyMMdd") + ".log", IntoRecord, System.Text.Encoding.Default);     
                }     
                catch { }     
                //替换注入的URL,并进行跳转     
                QueryString = QueryString.Replace(key, safeKeys[i]);     
                Response.Redirect(url + "?" + QueryString);     
                Response.End();     
            }     
        }     
    }     
</script>
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号

