.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() {