[ASP.NET] ELMAH 安全快速設定

  • 2639
  • 0
  • C#
  • 2013-06-15

[ASP.NET] ELMAH 安全快速設定

Elmah我使用很久了,也寫過2篇文章

[C#][ASP.NET MVC]ELMAH

[C#][ASP.NET MVC]ELMAH On IIS7.5

兩篇文章都在說明如何設定和使用ELMAH,

但對於保護ELMAH Url卻沒說太多,

昨天老闆希望我把ELMAH的Url掛在WebSite Menu(之前我是採取替換預設url path,並手動輸入),

這樣老闆可以簡單滑鼠點一下即可看到Website Error Report,

但因為整個Web Site驗證模式我是使用 Forms而非windows,

所以我為了快速達到這需求,決定使用 FormsAuthentication 類別來搞定,

如有任何安全上遺漏還請告知我一下。

 

先來看一下 web.config(擷取部分)

預設拒絕所有使用者


 <location path="Admin">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
  <system.webServer>

 

允許遠端存取

 <elmah>
    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="D:/APLogData" />
    <security allowRemoteAccess="1" />
  </elmah>


替換預設url path

  <httpHandlers>     
      <add verb="POST,GET,HEAD" path="/Admin/elmah_debug.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
    </httpHandlers>

 

只有以下員編可以存取elmah 

<appSettings>
    <add key="ElmahUser" value="A1083,A0290"/>
  </appSettings>

 

login.aspx

 <form id="form1" runat="server">
    <div>        
        empid:<asp:TextBox ID="txtid"  runat="server"></asp:TextBox>
        <asp:Button ID="loginButton" runat="server" Text="Login" OnClick="loginButton_Click" />    
    </div>
    </form>

 

login.aspx.cs


public partial class Login : System.Web.UI.Page
    {
        protected void loginButton_Click(object sender, EventArgs e)
        {
          
            if (Auth())
                FormsAuthentication.RedirectFromLoginPage(txtid.Text, false);//通過存取elmah驗證
            else
                Response.Redirect("~/WebForm1.aspx");         

        private bool Auth()
        {
            bool result = false;
            string[] userlist = ConfigurationManager.AppSettings["ElmahUser"].ToString().Split(',');
            string cempid = txtid.Text;
            var Users = from user in userlist
                      where user == cempid
                      select user.FirstOrDefault();
            if (Users != null && Users.Any())
                result= true;
            else
                result= false;
            return result;
          
        }
    }

 

執行

image

登入後進入webform1.aspx

 

 

image

輸入elmah url path 測試是否能存取。

 

image

由於該員編不在存取清單中,所以導回登入畫面。

 

使用存取清單員編登入

image

即可順利存取elmah。

 

 

ps:真實專案中這段我放在basepage,使用者先驗證相關帳號密碼後,

在進行elmah存取處理。

 

 

 

 

參考

Securing ELMAH with Independent HTTP Authentication