[asp.net-mvc] JsonRequestBehavior를 AllowGet으로 설정할 때 어떤 ‘민감한 정보’가 공개 될 수 있습니까?

나는 (내장을 사용하여) 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 요청을 수행하면 악의적 인 사용자가 scriptHTML 의 태그를 사용하여 자신의 사이트 컨텍스트에 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)


답변