Digamos que seu site tenha um GetUser
método da web:
http://www.example.com/User/GetUser/32
que retorna uma resposta JSON:
{ "Name": "John Doe" }
Se esse método aceitar apenas solicitações POST, o conteúdo só será retornado ao navegador se uma solicitação AJAX for feita http://www.example.com/User/GetUser/32
usando o método POST. Observe que, a menos que você tenha implementado o CORS , o navegador protegerá os dados de outros domínios que fazem essa solicitação ao seu.
No entanto, se você permitir solicitações GET, além de fazer uma solicitação AJAX semelhante à anterior com GET em vez de POST, um usuário mal-intencionado pode incluir seu JSON no contexto de seu próprio site usando uma script
tag no HTML. por exemplo em www.evil.com
:
<script src="http://www.example.com/User/GetUser/32"></script>
Este JavaScript deve ser inútil www.evil.com
porque não deve haver nenhuma maneira de ler o objeto retornado pelo seu método da web. Porém, devido a bugs em versões antigas de navegadores (por exemplo, Firefox 3), é possível redefinir objetos de protótipo JavaScript e possibilitar www.evil.com
a leitura dos dados retornados pelo método. Isso é conhecido como JSON Hijacking.
Veja esta postagem para alguns métodos de prevenir isso. No entanto, não é um problema conhecido com as versões posteriores dos navegadores modernos (Firefox, Chrome, IE).
www.example.com/User/DeleteUser/32
), já que a solicitação incluirá os cookies necessários para autenticação, pois eles vêm da máquina da vítima.[Authorize]
não irá salvá-lo do ataque detalhado aqui no caso de um navegador muito antigo - é o próprio usuário que está visitando,www.evil.com
então a solicitação feitawww.evil.com
parawww.example.com
conterá o cookie de autorização.em seu retorno, use o seguinte:
fonte
Por padrão, a estrutura ASP.NET MVC não permite que você responda a uma solicitação GET com uma carga JSON, pois há uma chance de um usuário mal-intencionado obter acesso à carga por meio de um processo conhecido como JSON Hijacking. Você não deseja retornar informações confidenciais usando JSON em uma solicitação GET.
Se você precisa enviar JSON em resposta a um GET e não está expondo dados confidenciais, pode permitir explicitamente o comportamento passando
JsonRequestBehavior.AllowGet
como um segundo parâmetro para oJson
método.Tal como
Aqui está um artigo interessante de Phil Haack
JSON Hijacking
sobre por que não usar Json com o método GETfonte
Quando queremos retornar um objeto json para o cliente do aplicativo MVC, devemos especificar explicitamente JsonRequestBehavior.AllowGet ao retornar um objeto. Como resultado, eu retorno os dados json conforme abaixo para resolver o problema:
fonte
Você deve usar JsonRequestBehavior.AllowGet para Resposta Json como este:
fonte
return Json ("Success", JsonRequestBehavior.AllowGet)
fonte