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 요청을 수행하면 악의적 인 사용자가 script
HTML 의 태그를 사용하여 자신의 사이트 컨텍스트에 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);
'IT story' 카테고리의 다른 글
R : rJava 패키지 설치 실패 (0) | 2020.08.07 |
---|---|
TypeScript를 사용한 개방형 함수 인수 (0) | 2020.08.07 |
비동기 대기 반환 작업 (0) | 2020.08.07 |
React Native에서 동적 스타일을 만들 수 있습니까? (0) | 2020.08.07 |
배열에서 값의 인덱스 찾기 (0) | 2020.08.07 |