Por que é Json Request Behavior
necessário?
Se eu quiser restringir os HttpGet
pedidos à minha ação, eu posso decorar a ação com o [HttpPost]
atributo
Exemplo:
[HttpPost]
public JsonResult Foo()
{
return Json("Secrets");
}
// Instead of:
public JsonResult Foo()
{
return Json("Secrets", JsonRequestBehavior.AllowGet);
}
Por que não é [HttpPost]
suficiente?
Por que os quadro "bugs" dos EUA com a JsonRequestBehavior.AllowGet
de todos os JsonResult
que temos. Se eu quiser negar solicitações get, adicionarei o HttpPost
atributo
c#
.net
asp.net-mvc
asp.net-mvc-3
security
gdoron está apoiando Monica
fonte
fonte
Respostas:
O MVC padroniza para
DenyGet
protegê-lo contra um ataque muito específico envolvendo solicitações JSON para melhorar a probabilidade de que as implicações de permitir aHTTP GET
exposição sejam consideradas antes de permitir que elas ocorram.Isso é contra depois, quando pode ser tarde demais.
Nota: Se o seu método de ação não retornar dados confidenciais, deve ser seguro permitir o recebimento.
Outras leituras do meu livro Wrox ASP.NET MVC3
Pergunta relacionada ao StackOverflow
Na maioria dos navegadores recentes (a partir do Firefox 21, Chrome 27 ou IE 10), isso não é mais uma vulnerabilidade.
fonte
JsonRequestBehavior.AllowGet
JsonResult que eu tenho. Se eu quiser negar a solicitação de obtenção, adicionarei oHttpPost
atributoPara facilitar, você também pode criar um atributo actionfilter
e use-o em sua ação
fonte
Por padrão, Jsonresult "Negar get"
Suponha que se tivermos o método abaixo
Por padrão, "Negar Get".
No método abaixo
Quando você precisa permitir ou usar get, temos que usar JsonRequestBehavior.AllowGet.
fonte
Melhorando um pouco a resposta de @Arjen de Mooij, tornando o AllowJsonGetAttribute aplicável aos controladores mvc (não apenas aos métodos de ação individuais):
fonte
Você não precisa disso.
Se sua ação tiver o
HttpPost
atributo, você não precisará se preocupar em definirJsonRequestBehavior
e usar a sobrecarga sem ela. Há uma sobrecarga para cada método sem aJsonRequestBehavior
enumeração. Aqui estão eles:Sem JsonRequestBehavior
Com JsonRequestBehavior
fonte