[ASP.NET] ELMAH 安全快速設定
Elmah我使用很久了,也寫過2篇文章
[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;
}
}
執行
登入後進入webform1.aspx
輸入elmah url path 測試是否能存取。
由於該員編不在存取清單中,所以導回登入畫面。
使用存取清單員編登入
即可順利存取elmah。
ps:真實專案中這段我放在basepage,使用者先驗證相關帳號密碼後,
在進行elmah存取處理。
參考