나는 (내장을 사용하여) URL
브라우저의 주소 표시 줄에서 새 항목 을 테스트 할 때마다 동일한 이전 오류가 발생 returning Json
했습니다 MVC JsonResult helper
.
.NET Framework에서 사용되는 경우 민감한 정보가 타사 웹 사이트에 공개 될 수 있기 때문에이 요청이 차단되었습니다
GET request
. 허용하려면GET requests
로 설정JsonRequestBehavior
하십시오AllowGet
.
이번에는 GET
요청 을 통해 요청이 드러내지 않는 것이 정확히 무엇인지 궁금합니다 POST
.
답변
웹 사이트에 GetUser
웹 방식 이 있다고 가정 해 보겠습니다 .
http://www.example.com/User/GetUser/32
JSON 응답을 반환합니다.
{ "Name": "John Doe" }
이 메소드가 POST 요청 만 허용 http://www.example.com/User/GetUser/32
하는 경우 POST 메소드 를 사용하여 AJAX 요청이 작성되는 경우에만 컨텐츠가 브라우저로 리턴됩니다 . CORS를 구현하지 않은 경우 브라우저는이 요청을 수행하는 다른 도메인의 데이터를 보호합니다.
그러나 GET 요청을 허용하고 POST 대신 GET을 사용하여 위와 유사한 AJAX 요청을 수행하면 악의적 인 사용자가 script
HTML 의 태그를 사용하여 자신의 사이트 컨텍스트에 JSON을 포함시킬 수 있습니다 . 예 www.evil.com
:
<script src="http://www.example.com/User/GetUser/32"></script>
이 JavaScript는 www.evil.com
웹 메서드에서 반환 된 개체를 읽을 방법이 없어야 하기 때문에 쓸모 가 없어야합니다. 그러나 이전 버전의 브라우저 (예 : Firefox 3)의 버그로 인해 JavaScript 프로토 타입 객체를 재정의하고 www.evil.com
메소드에서 반환 한 데이터를 읽을 수 있습니다. 이를 JSON 하이재킹이라고합니다.
이를 방지하는 몇 가지 방법은 이 게시물 을 참조하십시오 . 그러나 최신 버전의 최신 브라우저 (Firefox, Chrome, IE)에서는 알려진 문제가 아닙니다.
답변
반환시 다음을 사용하십시오.
return this.Json("you result", JsonRequestBehavior.AllowGet);
답변
기본적으로 ASP.NET MVC 프레임 워크에서는 악의적 인 사용자가 JSON 하이재킹이라는 프로세스를 통해 페이로드에 액세스 할 수 있으므로 JSON 페이로드로 GET 요청에 응답 할 수 없습니다. GET 요청에서 JSON을 사용하여 민감한 정보를 반환하고 싶지 않습니다.
GET에 대한 응답으로 JSON을 보내야하고 민감한 데이터를 노출하지 않는 JsonRequestBehavior.AllowGet
경우 Json
메서드에 두 번째 매개 변수로 전달하여 명시 적으로 동작을 허용 할 수 있습니다 .
같은
[HttpGet] //No need to decorate, as by default it will be GET
public JsonResult GetMyData(){
var myResultDataObject = buildMyData(); // build, but keep controller thin
// delegating buildMyData to builder/Query Builder using CQRS makes easy :)
return Json(myResultDataObject, JsonRequestBehavior.AllowGet);
}
다음은 Phil Haack JSON Hijacking
이 GET 메서드와 함께 Json을 사용하지 않는 이유에 대한 흥미로운 기사입니다.
답변
MVC 애플리케이션에서 클라이언트로 json 객체를 반환하려면 객체를 반환 할 때 JsonRequestBehavior.AllowGet을 명시 적으로 지정해야합니다. 결과적으로 문제를 극복하기 위해 아래와 같이 json 데이터를 반환합니다.
return Json(yourObjectData, JsonRequestBehavior.AllowGet);
답변
다음과 같이 Json Response에 JsonRequestBehavior.AllowGet을 사용해야합니다.
return Json(YourObject, JsonRequestBehavior.AllowGet);
답변
return Json ( “성공”, JsonRequestBehavior.AllowGet)