Protecting Elmah.axd
Elamh is a common tool to debug ASP.NET application. You can use Elmah in Azure Website, here is a nice blog
But by default Elamh.axd is available to all users. Here are quick steps to secure it using forms authentication.
Protecting Elmah.axd using ASP.NET Authentication
Add these lines at the end of web.config file
<elmah>
<!--
allow remote access to elamh.axd
-->
<security allowRemoteAccess="true" />
</elmah>
<location path="elmah.axd"
inheritInChildApplications="false">
<system.web>
<httpHandlers>
<add verb="POST,GET,HEAD"
path="elmah.axd"
type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<!--
allow only elmahuser to access elamh.axd
-->
<authorization>
<allow users="elmahuser" />
<deny users="*" />
</authorization>
</system.web>
<system.webServer>
<handlers>
<add name="ELMAH" verb="POST,GET,HEAD"
path="elmah.axd"
type="Elmah.ErrorLogPageFactory, Elmah"
preCondition="integratedMode" />
</handlers>
</system.webServer>
</location>
Create a user account
Add these lines within <system.web> node in web.config file as shown
<authentication mode="Forms" >
<forms name="elmahdetails" loginUrl="login.aspx">
<credentials passwordFormat="Clear" >
<user name="elmahuser" password="mycomplexpassword"/>
</credentials>
</forms>
</authentication>
<authorization>
<allow users = "?" />
</authorization>
</system.web>
Add Login.aspx page, and add this html tags
<form id="form1" runat="server">
<table>
<tr>
<td>User Name:</td>
<td>
<asp:TextBox ID="TextBox1"
runat="server" />
</td>
</tr>
<tr>
<td>Password:</td>
<td>
<asp:TextBox TextMode="Password"
ID="TextBox2"
runat="server" />
</td>
</tr>
</table>
<p>
<asp:Button ID="cmdLogin"
runat="server"
Text="Logon"
OnClick="cmdLogin_Click" />
</p>
</form>
Add this in the code behind
protected void cmdLogin_Click(object sender, EventArgs e)
{
if (string.Compare(TextBox2.Text, "mycomplexpassword") == 0 &&
string.Compare(TextBox1.Text, "elmahuser") == 0)
{
FormsAuthenticationTicket tkt;
string cookiestr;
HttpCookie ck;
tkt = new FormsAuthenticationTicket(1,
TextBox1.Text,
DateTime.Now,
DateTime.Now.AddMinutes(30),
true,
"your custom data");
cookiestr = FormsAuthentication.Encrypt(tkt);
ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
ck.Expires = tkt.Expiration;
ck.Path = FormsAuthentication.FormsCookiePath;
Response.Cookies.Add(ck);
string strRedirect;
strRedirect = Request["ReturnUrl"];
if (strRedirect == null)
strRedirect = "default.aspx";
Response.Redirect(strRedirect, true);
}
else
Response.Redirect("login.aspx", true);
}
Now try to access elmah.axd file, it should redirect to login.aspx page. Note : we are sending password in clear text