asp.net C# 全站防注入 利用Global.asax

來源:互聯網
上載者:User

全站防注入通用程式

在網站根目錄下建立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 = "&#59;|&#39;|&#45;&#45;|&#120;&#112;&#95;|&#88;&#80;&#95;|&#120;&#80;&#95;|&#88;&#112;&#95;".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>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.