Angenommen, Ihre Website verfügt über eine GetUser
Webmethode:
http://www.example.com/User/GetUser/32
Dies gibt eine JSON-Antwort zurück:
{ "Name": "John Doe" }
Wenn diese Methode nur POST-Anforderungen akzeptiert, wird der Inhalt nur an den Browser zurückgegeben, wenn eine AJAX-Anforderung zur http://www.example.com/User/GetUser/32
Verwendung der POST-Methode gestellt wird. Beachten Sie , dass der Browser die Daten vor anderen Domänen schützt, die diese Anforderung an Ihre senden , sofern Sie CORS nicht implementiert haben .
Wenn Sie jedoch GET-Anforderungen zugelassen und eine AJAX-Anforderung ähnlich der oben genannten mit GET anstelle von POST gestellt haben, kann ein böswilliger Benutzer Ihren JSON mithilfe eines script
Tags im HTML- Code in den Kontext seiner eigenen Site aufnehmen . zB am www.evil.com
:
<script src="http://www.example.com/User/GetUser/32"></script>
Dieses JavaScript sollte unbrauchbar sein, www.evil.com
da es keine Möglichkeit geben sollte, das von Ihrer Webmethode zurückgegebene Objekt zu lesen. Aufgrund von Fehlern in alten Browserversionen (z. B. Firefox 3) ist es jedoch möglich, JavaScript-Prototypobjekte neu zu definieren und www.evil.com
Ihre von Ihrer Methode zurückgegebenen Daten zu lesen. Dies ist als JSON-Hijacking bekannt.
In diesem Beitrag finden Sie einige Methoden, um dies zu verhindern. Es ist jedoch kein bekanntes Problem mit den späteren Versionen moderner Browser (Firefox, Chrome, IE).
www.example.com/User/DeleteUser/32
), da die Anforderung die zur Authentifizierung erforderlichen Cookies enthält, da diese vom Computer des Opfers stammen.[Authorize]
hier im Fall eines sehr alten Browser detaillierten Angriff wird nicht sparen Sie von dem entweder - es ist der Benutzer selbst entscheiden ,www.evil.com
so die Anforderungwww.evil.com
an machtwww.example.com
die Genehmigung Cookie enthält.Verwenden Sie bei Ihrer Rücksendung Folgendes:
quelle
Standardmäßig können Sie mit dem ASP.NET MVC-Framework nicht auf eine GET-Anforderung mit einer JSON-Nutzlast antworten, da ein böswilliger Benutzer möglicherweise über einen als JSON-Hijacking bezeichneten Prozess auf die Nutzlast zugreifen kann. Sie möchten keine vertraulichen Informationen mit JSON in einer GET-Anforderung zurückgeben.
Wenn Sie JSON als Antwort auf ein GET senden müssen und keine vertraulichen Daten verfügbar machen, können Sie das Verhalten explizit zulassen, indem Sie es
JsonRequestBehavior.AllowGet
als zweiten Parameter an dieJson
Methode übergeben.Sowie
Hier ist ein interessanter Artikel von Phil Haack
JSON Hijacking
darüber, warum man Json nicht mit der GET-Methode verwenden solltequelle
Wenn wir ein JSON-Objekt aus einer MVC-Anwendung an den Client zurückgeben möchten, sollten wir bei der Rückgabe eines Objekts explizit JsonRequestBehavior.AllowGet angeben. Infolgedessen gebe ich die folgenden JSON-Daten zurück, um das Problem zu beheben:
quelle
Sie müssen JsonRequestBehavior.AllowGet für Json Response wie folgt verwenden:
quelle
return Json ("Erfolg", JsonRequestBehavior.AllowGet)
quelle