You never want your users to see that yellow screen which shows up when a run-time or design-time error occurs in Asp.Net. However, a developer might want to see the error which may help in finding out the issue.
We have the following Custom error modes in Asp.net that can be set in web.config file:
- Off: shows the actual error on the screen for all users.
- On: shows only the custom error page and not the error details to all users.
- RemoteOnly: shows the error details only to the local users where the Application is running. But does not show it to the outside users.
We recently faced a scenario where one of our Asp.Net Application was returning 3xx series status code from IIS Server for non-existent pages. This was flagged as a possible Security flaw by the team.
So, if the page xyz.aspx does not exist, the Server will return 404 status code by default.
The following CustomErrors setting by default will give 404 status code:
<customErrors mode="Off" defaultRedirect="Error.htm"/>
We have used CustomErrors in our Web.config file which by the default behaviour of Asp.Net will make the IIS send the following response…
• With status code 302: Found, which effectively means a redirect
• Having a Location response header where the resource should be requested (in this case, the generic error page).
In the end, because the generic error page is static and does not change, when that is requested over same session IIS may return the response 304: Not modified.
Asp.Net CustomErrors setting in Web.Config file:
<customErrors mode="On" defaultRedirect="Error.htm"/>
The below setting produces the same result:
<customErrors mode="On" defaultRedirect="Error.htm"> <error statusCode="404" redirect="FileNotFound.htm" /> </customErrors>
Similarly, you can manage other status codes.
The default behaviour of Asp.Net returning 3xx series status codes is by design for redirect done by Custom Errors and could be a false Security alert.