Допустим, у вашего сайта есть GetUser
веб-метод:
http://www.example.com/User/GetUser/32
который возвращает ответ JSON:
{ "Name": "John Doe" }
Если этот метод принимает только запросы POST, то содержимое будет возвращено в браузер только в том случае, если запрос AJAX выполнен с http://www.example.com/User/GetUser/32
использованием метода POST. Обратите внимание: если вы не реализовали CORS , браузер будет защищать данные от других доменов, отправляющих этот запрос к вам.
Однако, если вы разрешили запросы GET, а также сделали запрос AJAX, аналогичный приведенному выше, с GET вместо POST, злонамеренный пользователь может включить ваш JSON в контекст своего собственного сайта, используя script
тег в HTML. например, на www.evil.com
:
<script src="http://www.example.com/User/GetUser/32"></script>
Этот JavaScript должен быть бесполезным, www.evil.com
потому что не должно быть возможности прочитать объект, возвращаемый вашим веб-методом. Однако из-за ошибок в старых версиях браузеров (например, Firefox 3) возможно переопределение объектов-прототипов JavaScript и возможность www.evil.com
чтения ваших данных, возвращаемых вашим методом. Это известно как JSON Hijacking.
Посмотрите этот пост, чтобы узнать о некоторых методах предотвращения этого. Однако это не известная проблема в более поздних версиях современных браузеров (Firefox, Chrome, IE).
www.example.com/User/DeleteUser/32
), поскольку запрос будет включать файлы cookie, необходимые для аутентификации, поскольку они поступают с машины жертвы.[Authorize]
не спасет вас от атаки, описанной здесь, и в случае очень старого браузера - это сам пользователь,www.evil.com
поэтому запрос,www.evil.com
сделанный в,www.example.com
будет содержать файл cookie авторизации.взамен используйте следующее:
источник
По умолчанию платформа ASP.NET MVC не позволяет вам отвечать на запрос GET с полезной нагрузкой JSON, так как есть шанс, что злоумышленник может получить доступ к полезной нагрузке с помощью процесса, известного как JSON Hijacking. Вы не хотите возвращать конфиденциальную информацию, используя JSON в запросе GET.
Если вам нужно отправить JSON в ответ на GET и не раскрывать конфиденциальные данные, вы можете явно разрешить такое поведение, передав методу
JsonRequestBehavior.AllowGet
в качестве второго параметраJson
.Такие как
Вот интересная статья Фила Хаака
JSON Hijacking
о том, почему бы не использовать Json с методом GET.источник
Когда мы хотим вернуть объект json клиенту из приложения MVC, мы должны явно указать JsonRequestBehavior.AllowGet при возврате объекта. В результате я возвращаю данные json, как показано ниже, чтобы решить проблему:
источник
Вы должны использовать JsonRequestBehavior.AllowGet для ответа Json следующим образом:
источник
return Json ("Успех", JsonRequestBehavior.AllowGet)
источник