¿Por qué es Json Request Behavior
necesario?
Si deseo restringir las HttpGet
solicitudes a mi acción, puedo decorar la acción con el [HttpPost]
atributo
Ejemplo:
[HttpPost]
public JsonResult Foo()
{
return Json("Secrets");
}
// Instead of:
public JsonResult Foo()
{
return Json("Secrets", JsonRequestBehavior.AllowGet);
}
¿Por qué no es [HttpPost]
suficiente?
Por qué el marco nos "fastidia" con el JsonRequestBehavior.AllowGet
por todo lo JsonResult
que tenemos. Si quiero negar las solicitudes de obtención, agregaré el HttpPost
atributo.
c#
.net
asp.net-mvc
asp.net-mvc-3
security
gdoron está apoyando a Monica
fuente
fuente
Respuestas:
El valor predeterminado de MVC
DenyGet
es protegerlo contra un ataque muy específico que involucra solicitudes JSON para mejorar la probabilidad de que las implicaciones de permitir laHTTP GET
exposición se consideren antes de permitir que ocurran.Esto se opone a después cuando podría ser demasiado tarde.
Nota: Si su método de acción no devuelve datos confidenciales, entonces debería ser seguro permitir la obtención.
Lectura adicional de mi libro Wrox ASP.NET MVC3
Pregunta relacionada de StackOverflow
Con la mayoría de los navegadores recientes (comenzando con Firefox 21, Chrome 27 o IE 10), esto ya no es una vulnerabilidad.
fuente
JsonRequestBehavior.AllowGet
fastidia " con el por cada JsonResult que tengo? Si quiero negar la solicitud de obtención, agregaré elHttpPost
atributo.Para que sea más fácil para usted, también puede crear un atributo de filtro de acción
y úsalo en tu acción
fuente
Por defecto Jsonresult "Denegar obtener"
Supongamos que si tenemos un método como el siguiente
Por defecto es "Denegar Obtener".
En el siguiente método
Cuando necesite permitir o usar get, tenemos que usar JsonRequestBehavior.AllowGet.
fuente
Mejorando un poco la respuesta de @Arjen de Mooij haciendo que AllowJsonGetAttribute sea aplicable a los controladores mvc (no solo a los métodos de acción individuales):
fuente
No lo necesitas.
Si su acción tiene el
HttpPost
atributo, no necesita preocuparse por configurarJsonRequestBehavior
y usar la sobrecarga sin él. Hay una sobrecarga para cada método sin laJsonRequestBehavior
enumeración. Aquí están:Sin JsonRequestBehavior
Con JsonRequestBehavior
fuente