ActionResult nur wenn Angemeldet oder AllowAnonymous

von

in

Problem und Risikobeschreibung der Standardverfahren
Nach einer kleinen Anpassung in der Global.asax.cs erfordern Actions mit [Authorize] einen Login und Actions mit [AllowAnonymous] lassen sich diese Actions in jedem Fall aufrufen aber Actions ohne einer solchen Annotation können auch aufgerufen werden wenn man nicht eingeloggt ist. Nun ist es ein potentielles Sicherheitsrisiko wenn bei einer Action das [Authorize] vergessen wurde. Auch wenn man [Authorize] auch auf eine ganze Controller Klasse anwenden kann, kann dies bei neuen Controllern leicht vergessen werden.
Eine weitere Möglichkeit ist es in der Web.config den Zugriff auf alle Actions zu sperren, wodurch nur die Loginseite erreichbar ist. Hierdurch ist aber auch die [AllowAnonymous] Annotation unwirksam. Die Register Seite ist damit schon ein Problem.

Best Practice
Ein schönerer Ansatz ist es, wenn standardmäßig alle Actions einen Login erfordern und man mit [AllowAnonymous] nur ein Whitelisting einiger weniger Actions wie der Login Action macht.

In der FilterConfig.cs das AuthorizeAttribute als globalen Filter hinzufügen, wodurch [Authorize] standardmäßig bei Actions angewendet wird

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new AuthorizeAttribute()); // add this
}

In der Global.asax.cs das AuthorizeAttribute aktivieren (falls noch nicht getan)

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new System.Web.Mvc.AuthorizeAttribute()); // add this
}

In Web.config folgendes auskommentieren (falls vorher hinzugefügt)


Quelle: visualstudiomagazine.com


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert