Warum wird Json Request Behavior
benötigt?
Wenn ich die HttpGet
Anforderungen auf meine Aktion beschränken möchte, kann ich die Aktion mit dem [HttpPost]
Attribut dekorieren
Beispiel:
[HttpPost]
public JsonResult Foo()
{
return Json("Secrets");
}
// Instead of:
public JsonResult Foo()
{
return Json("Secrets", JsonRequestBehavior.AllowGet);
}
Warum reicht das nicht [HttpPost]
aus?
Warum das Framework uns mit dem "nervt"JsonRequestBehavior.AllowGet
für jeden , JsonResult
dass wir haben. Wenn ich Anfragen abrufen möchte, füge ich das HttpPost
Attribut hinzu.
c#
.net
asp.net-mvc
asp.net-mvc-3
security
Gdoron unterstützt Monica
quelle
quelle
Antworten:
MVC ist standardmäßig auf
DenyGet
schützt Sie vor einem sehr spezifischen Angriff mit JSON-Anforderungen, um die Wahrscheinlichkeit zu verbessern, die die Auswirkungen des Zulassens habenHTTP GET
Exposition berücksichtigt werden, sie auftreten.Dies steht im Gegensatz zu später, wenn es zu spät sein könnte.
Hinweis: Wenn Ihre Aktionsmethode keine vertraulichen Daten zurückgibt, sollte es sicher sein, das Abrufen zuzulassen.
Lesen Sie weiter aus meinem Wrox ASP.NET MVC3-Buch
Verwandte StackOverflow-Frage
Bei den meisten aktuellen Browsern (beginnend mit Firefox 21, Chrome 27 oder IE 10) ist dies keine Sicherheitsanfälligkeit mehr.
quelle
JsonRequestBehavior.AllowGet
für jedes JsonResult " nervt", das ich habe. Wenn ich die Abrufanforderung ablehnen möchte, füge ich dasHttpPost
Attribut hinzu.Um es sich einfacher zu machen, können Sie auch ein Aktionsfilterattribut erstellen
und benutze es für deine Aktion
quelle
Standardmäßig Jsonresult "Deny get"
Angenommen, wir haben eine Methode wie unten
Standardmäßig ist es "Deny Get".
In der folgenden Methode
Wenn Sie get zulassen oder verwenden müssen, müssen wir JsonRequestBehavior.AllowGet verwenden.
quelle
Die Antwort von @Arjen de Mooij ein wenig verbessern, indem das AllowJsonGetAttribute auf MVC-Controller angewendet wird (nicht nur auf einzelne Aktionsmethoden):
quelle
Du brauchst es nicht.
Wenn Ihre Aktion das
HttpPost
Attribut hat, müssen Sie sich nicht mit dem Festlegen des Attributs befassenJsonRequestBehavior
und die Überladung ohne dieses Attribut verwenden. Für jede Methode ohneJsonRequestBehavior
Aufzählung gibt es eine Überladung . Hier sind sie:Ohne JsonRequestBehavior
Mit JsonRequestBehavior
quelle