Vraag Welke 'gevoelige informatie' kan worden vermeld bij het instellen van JsonRequestBehavior to AllowGet


Ik krijg steeds dezelfde oude fout telkens als ik een nieuwe test URL uit de adresbalk van mijn browser als ik dat ben returning Json (met behulp van de ingebouwde MVC JsonResult helper):

Dit verzoek is geblokkeerd omdat gevoelige informatie kan worden bekendgemaakt aan websites van derden wanneer dit wordt gebruikt in een GET request. Toelaten GET requests, stel in JsonRequestBehavior naar AllowGet.

In plaats van te grommen in erkenning en Fiddler aan te zetten om een ​​postverzoek te doen, vraag ik me dit keer af wat het is dat een GET verzoek legt bloot dat een POST verzoek niet?


80
2018-01-30 09:49


oorsprong


antwoorden:


Stel dat uw website een heeft GetUser web methode:

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

die een JSON-antwoord retourneert:

{ "Name": "John Doe" }

Als deze methode alleen POST-aanvragen accepteert, wordt de inhoud alleen teruggestuurd naar de browser als er een AJAX-aanvraag wordt gedaan http://www.example.com/User/GetUser/32 met behulp van de POST-methode. Merk op dat tenzij je hebt geïmplementeerd CORS, de browser zal de gegevens beschermen tegen andere domeinen die dit verzoek aan u doen.

Als u echter GET-aanvragen hebt toegestaan ​​en een AJAX-aanvraag heeft gedaan die vergelijkbaar is met het bovenstaande met GET in plaats van met POST, kan een kwaadwillende gebruiker uw JSON opnemen in de context van zijn eigen site door een script tag in de HTML. bijv. op www.evil.com:

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

Dit JavaScript zou nutteloos moeten zijn www.evil.com omdat er geen manier is om het object te lezen dat door uw webmethode wordt geretourneerd. Vanwege bugs in oude versies van browsers (bijvoorbeeld Firefox 3), is het echter mogelijk om JavaScript-prototypeobjecten opnieuw te definiëren en het mogelijk te maken www.evil.com om uw gegevens te lezen die door uw methode worden geretourneerd. Dit staat bekend als JSON Hijacking.

Zien deze post voor sommige methoden om dit te voorkomen. Het is echter geen bekend probleem met de latere versies van moderne browsers (Firefox, Chrome, IE).


62
2018-02-01 14:06



gebruik in je terugkeer het volgende:

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

85
2018-05-18 10:20



Standaard staat het ASP.NET MVC-framework niet toe dat je antwoordt   een HTTP GET-verzoek met een JSON-payload. Als u JSON moet verzenden   reactie op een GET, moet u het gedrag expliciet toestaan ​​door   gebruik makend van JsonRequestBehavior.AllowGet als de tweede parameter voor de Json   methode. Er is echter een kans dat een kwaadwillende gebruiker toegang kan krijgen   de JSON-payload via een proces dat bekend staat als JSON Hijacking. Je doet niet   wil gevoelige informatie teruggeven met behulp van JSON in een GET-verzoek.

Lezen JSON Hijacking van Phil Haack


42
2018-01-30 09:55



Wanneer we een json-object naar een client vanuit de MVC-toepassing willen retourneren, moeten we expliciet JsonRequestBehavior.AllowGet opgeven wanneer een object wordt geretourneerd. Als gevolg hiervan retourneer ik json-gegevens zoals hieronder om het probleem te verhelpen:

    return Json(yourObjectData, JsonRequestBehavior.AllowGet);

3
2017-11-17 22:29