2016-04-27 27 views
1

Also ich frage mich, wie wichtig das AntiForegryToken ist, weil es einige Probleme für mich verursacht.In Bezug auf die @ Html.AntiForgeryToken()

Ich habe eine Klasse, wo ich schaue, ob der Benutzer in der Rolle "PremiumAnvändare" ist (es ist PremiumUser in Schwedisch) und wenn nicht, leite ich sie zu "rolenotfound".

public ActionResult Create() 
    { 

     if (User.IsInRole("PremiumAnvändare")) 
     { 
      ViewBag.SammanhangsID = new SelectList(db.Sammanhangs, "SammanhangsID", "Namn"); 
      return View(); 


     } 
     Response.Redirect("rolenotfound"); 
     return View(); 
    } 

Aber wenn der Benutzer i den Fehler rolenotfound umgeleitet wird

Eine Ausnahme vom Typ ‚System.Web.HttpException‘ aufgetreten in System.Web.dll wurde aber in Benutzer nicht behandelt Code

Der Server kann keine Kopfzeile hinzufügen, nachdem HTTP-Header gesendet wurden.

Dies wird durch das Löschen der @ Html.AntiForgeryToken()

Bin ich etwas falsch oder ist es in Ordnung, das Token zu entfernen tun gelöst? Ich habe es ein wenig überarbeitet und ich verstehe, dass es sich gegen Cross-Site-Angriffe verteidigen muss, aber ich glaube nicht, dass dies ein Problem sein wird, da wir eine mobile App erstellen. Aber korrigiere mich bitte und lehre mich, damit ich das richtig machen kann.

+0

Das hängt davon ab, ob Sie CSRF-Schutz möchten oder nicht –

+0

Sind diese Angriffe üblich? –

+0

Das hängt davon ab, wie wahrscheinlich und attraktiv ein Ziel für Ihre Website und Ihre Nutzer ist. Auschecken [Cross-Site Request Forgery auf owasp] (https://www.owasp.org/index.php/Cross-Site_Request_Forgery_ (CSRF)) –

Antwort

0

ich es gelöst, indem

Response.Redirect("rolenotfound"); 
     return View(); 

zu

return PartialView("rolenotfound"); 
Wechsel

dies hindert mich nicht von der Antifälschungs Token, aber das Layout ist in diesem Fall nicht enthalten, aber das wird nicht ein Problem in meinem Projekt sein.

0

Ich denke, dass das Problem, das Sie haben, ist, dass Sie Ihre Antwort nicht nach Umleitung beenden. Der Unterschied zwischen Response.Redirect("rolenotfound"); und Response.Redirect("rolenotfound", true); ist, dass die Sekunde den Thread abbrechen und die Ausführung von return View(); verhindern wird.

Ich nehme an, dass, obwohl Umleitung ausgeführt wird, return View(); wird ausgeführt und System.Web.HttpException werfen.

CSRF sind meiner Meinung nach ziemlich verbreitet (zumindest wenn Sie eine Anwendung haben, die für Angreifer attraktiv ist), aber niemand wird Ihnen sagen, ob Sie diese Art von Schutz brauchen oder nicht - Sie müssen sich selbst entscheiden.