IT story

JsonRequestBehavior를 AllowGet으로 설정할 때 어떤 '민감한 정보'가 공개 될 수 있습니까?

hot-time 2020. 8. 7. 07:53
반응형

JsonRequestBehavior를 AllowGet으로 설정할 때 어떤 '민감한 정보'가 공개 될 수 있습니까?


(내장을 사용하여) URL브라우저의 주소 표시 줄에서 새 항목 테스트 할 때마다 동일한 이전 오류가 발생 returning Json했습니다 MVC JsonResult helper.

.NET Framework에서 사용되는 경우 민감한 정보가 타사 웹 사이트에 공개 될 수 있기 때문에이 요청이 차단되었습니다 GET request. 허용하려면 GET requests로 설정 JsonRequestBehavior하십시오 AllowGet.

이번에는 GET요청 을 통해 요청이 공개 POST하지 않는 것이 무엇인지 정확히 알고 있는지 궁금해하고 Fiddler를 실행하여 게시 요청을 수행합니다 .


웹 사이트에 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>

www.evil.com웹 메서드에서 반환 된 개체를 읽을 방법이 없어야 하므로이 JavaScript는 쓸모 가 없어야합니다. 그러나 이전 버전의 브라우저 (예 : 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);

참고 URL : https://stackoverflow.com/questions/21452925/what-sensitive-information-could-be-disclosed-when-setting-jsonrequestbehavior

반응형