Pourquoi est-JsonRequestBehavior nécessaire?
Pourquoi est Json Request Behavior
nécessaire?
Si je veux limiter le HttpGet
demande à mon action, je peux décorer l'action avec la [HttpPost]
attribut
Exemple:
[HttpPost]
public JsonResult Foo()
{
return Json("Secrets");
}
//Instead of:
public JsonResult Foo()
{
return Json("Secrets", JsonRequestBehavior.AllowGet);
}
Pourquoi n'est-ce pas [HttpPost]
suffisant?
Pourquoi le cadre des "bugs" nous de la JsonRequestBehavior.AllowGet
pour chaque JsonResult
que nous avons. Si je veux refuser les requêtes get, je vais ajouter la HttpPost
attribut.
- Très similaire à stackoverflow.com/questions/1625671/... (bien que j'ai trouvé celui-ci à la recherche de mon propre question :))
- Parce que OBTENIR est censé être idempotent considérant que la POSTE ne l'est pas. En faisant Obtient -> les Postes, vous modifiez la sémantique de l'interface.
- Parce que votre code aurait l'air trop propre si vous n'avez pas à ajouter crufty args partout.
Vous devez vous connecter pour publier un commentaire.
MVC par défaut
DenyGet
pour vous protéger contre une attaque spécifique impliquant JSON demandes d'amélioration de la liklihood que les implications de permettreHTTP GET
exposition sont prises à l'avance de leur permettre de se produire.C'est par opposition à par la suite quand il pourrait être trop tard.
Remarque: Si votre méthode d'action ne renvoie pas de données sensibles, alors il doit être sûr pour permettre à l'obtenir.
Lecture de mon Wrox ASP.NET MVC3 livre
Liées StackOverflow question
Avec les plus récents navigateurs (à partir de Firefox 21, Chrome 27, ou IE 10), ce n'est plus une vulnérabilité.
JsonRequestBehavior.AllowGet
pour chaque JsonResult que j'ai. Si je veux nier requête get, je vais ajouter laHttpPost
attribut.bool
, ou même une autre méthode commeJsonGet(...)
par exemple. Les gens seraient encore à se demander pourquoi il est là et apprendre au sujet de la vulnérabilité / risque. Bien sûr, vous pouvez faire de celles-vous sur un BaseController, mais je n'aime pas avoir un BaseController à tous personnellement.Pour le rendre plus facile pour vous-même, vous pouvez également créer un actionfilterattribute
et l'utiliser sur votre action
Par défaut Jsonresult "Refuser l'obtenir"
Suppose que si nous avons méthode comme ci-dessous
Par défaut "Refuser l'Obtenir".
Dans la méthode ci-dessous
Lorsque vous avez besoin de allowget ou utiliser les obtenir ,nous devons utiliser JsonRequestBehavior.AllowGet.
L'amélioration de la réponse de @Arjen de Mooij un peu en faisant de la
AllowJsonGetAttribute applicable pour mvc-contrôleurs (et pas seulement de l'action individuelle-méthodes):
Vous n'en avez pas besoin.
Si votre action a la
HttpPost
attribut, alors vous n'avez pas besoin de s'embêter avec réglage de laJsonRequestBehavior
et utilisez la surcharge sans elle. Il y a une surcharge pour chaque méthode sansJsonRequestBehavior
enum. Ici, ils sont:Sans JsonRequestBehavior
Avec JsonRequestBehavior