users net jsonrequestbehavior asp allowget asp.net-mvc json security http-post http-get

asp.net mvc - net - ¿Qué ''información sensible'' podría revelarse al configurar JsonRequestBehavior en AllowGet?



return json users jsonrequestbehavior allowget); (4)

He estado obteniendo el mismo error cada vez que pruebo una nueva URL desde la barra de direcciones de mi navegador cuando returning Json (usando el MVC JsonResult helper ):

Esta solicitud se ha bloqueado porque la información confidencial podría divulgarse a sitios web de terceros cuando se utiliza en una GET request . Para permitir GET requests , establezca JsonRequestBehavior en AllowGet .

En lugar de gruñir de reconocimiento e iniciar Fiddler para hacer una solicitud posterior, esta vez, me pregunto exactamente qué es lo que expone una solicitud GET que una solicitud POST no hace?


De forma predeterminada, el marco MVC de ASP.NET no le permite responder a una solicitud HTTP GET con una carga útil JSON. Si necesita enviar JSON en respuesta a un GET, deberá permitir explícitamente el comportamiento utilizando JsonRequestBehavior.AllowGet como el segundo parámetro del método Json. Sin embargo, existe la posibilidad de que un usuario malintencionado pueda obtener acceso a la carga JSON a través de un proceso conocido como secuestro JSON. No desea devolver información confidencial utilizando JSON en una solicitud GET.

Lea JSON Hijacking de Phil Haack


Cuando queremos devolver un objeto json al cliente desde la aplicación MVC, debemos explícitamente especificar JsonRequestBehavior.AllowGet al devolver un objeto. Como resultado, devuelvo los datos de json como se detalla a continuación para solucionar el problema:

return Json(yourObjectData, JsonRequestBehavior.AllowGet);


Supongamos que su sitio web tiene un método web GetUser :

http://www.example.com/User/GetUser/32

que devuelve una respuesta JSON:

{ "Name": "John Doe" }

Si este método solo acepta solicitudes POST, el contenido solo se devolverá al navegador si se realiza una solicitud AJAX a http://www.example.com/User/GetUser/32 utilizando el método POST. Tenga en cuenta que a menos que haya implementado CORS , el navegador protegerá los datos de otros dominios que hagan esta solicitud a los suyos.

Sin embargo, si permitía las solicitudes GET y además realizaba una solicitud AJAX similar a la anterior con GET en lugar de POST, un usuario malintencionado podría incluir su JSON en el contexto de su propio sitio utilizando una etiqueta de script en el HTML. por ejemplo, en www.evil.com :

<script src="http://www.example.com/User/GetUser/32"></script>

Este JavaScript no debería ser útil para www.evil.com porque no debería haber forma de leer el objeto devuelto por su método web. Sin embargo, debido a errores en las versiones anteriores de los navegadores (por ejemplo, Firefox 3), es posible redefinir los objetos del prototipo JavaScript y hacer posible que www.evil.com lea los datos que devuelve su método. Esto se conoce como Secuestro JSON.

Consulte esta publicación para conocer algunos métodos para prevenir esto. Sin embargo, no es un problema conocido con las versiones posteriores de los navegadores modernos (Firefox, Chrome, IE).


a su regreso, use lo siguiente:

return this.Json("you result", JsonRequestBehavior.AllowGet);