.NET Code sollte im Release Modus kompiliert werden.
Web.config:
<system.web> <compilation debug="false"/>
Codeablaufverfolg sollte nur bei Debuggen auf der lokalen Maschine verwendet werden.
Web.config:
<system.web> <trace enabled="false"/>
Die von ASP.NET generierten Fehlermeldungen könnten kritische Informationen (wie etwas ConnectionStrings) enthalten.
Web.config:
<system.web> <customErrors mode="RemoteOnly" redirectMode="ResponseWrite" defaultRedirect="~/error.html"/>
HTTP Header sollten möglichst wenig über das System verraten.
Web.config:
<system.web> <httpRuntime enableVersionHeader="false"/>
In Global.asax z.B. bei Application_Start():
MvcHandler.DisableMvcResponseHeader = true;
Web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By"/>
Klasse RemoveServerHeaderModule anlegen:
using System;
using System.Web;
namespace IHS.WebApp.Filters {
public class RemoveServerHeaderModule : IHttpModule {
public void Init(HttpApplication context) {
context.PreSendRequestHeaders += OnPreSendRequestHeaders;
}
public void Dispose() {}
private void OnPreSendRequestHeaders(object sender, EventArgs e) {
HttpContext.Current.Response.Headers.Remove("Server");
}
}
}
Web.config
<system.webServer>
<modules>
<add name="RemoveServerHeaderModule" type="YouPickIt.WebApp.Filters.RemoveServerHeaderModule"/>
Cookies sollten ausschließlich per HTTP gesetzt werden und nie per JavaScript.
Web.config:
<system.web> <httpCookies httpOnlyCookies="true"/>
Die SessionID sollte ausschließlich über Cookies übertragen werden.
Web.config:
<system.web> <sessionState cookieless="UseCookies"/>
Web.config:
<system.web>
<authentication mode="Forms"/>
<forms cookieless="UseCookies" requireSSL="true"/>
Die neueste AntiXSS Bibliothek von Microsoft installieren und als Default Encoder verwenden.
Web.config:
<system.web> <httpRuntime encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary"/>
Alternative: Die in .NET 4.5 integrierte Version der Bibliothek verwenden. Dies ist älter aber weniger restriktiv
Web.config:
<system.web> <httpRuntime encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
Die ASP.NET MVC Funktionen für Anti Forgery Tokens nutzen.
Im View:
<form ...> @Html.AntiForgeryToken()
In JavaScript (als Beispiel AJAX mit jQuery):
function addAntiForgeryToken(data) {
data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
return data;
}
...
$.ajax({
data: addAntiForgeryToken(myRequestData),
...
});
Im Controller:
[ValidateAntiForgeryToken]
public ViewResult Action() {