JsonRequestBehavior가 필요한 이유는 무엇입니까?
이유는Json Request Behavior
필요합니까?
제한하려면 다음을 수행합니다.HttpGet
나의 행동에 대한 요청들로 나는 행동을 장식할 수 있습니다.[HttpPost]
기여하다
예:
[HttpPost]
public JsonResult Foo()
{
return Json("Secrets");
}
// Instead of:
public JsonResult Foo()
{
return Json("Secrets", JsonRequestBehavior.AllowGet);
}
왜 안 되죠?[HttpPost]
충분합니까?
프레임워크가 왜 우리를 그들과 "버깅"JsonRequestBehavior.AllowGet
매회JsonResult
우리가 가지고 있는 것.수신 요청을 거부하려면 다음을 추가합니다.HttpPost
기여하다.
MVC 기본값:DenyGet
JSON 요청과 관련된 매우 구체적인 공격으로부터 당신을 보호하기 위해 허용의 의미가 가능성을 개선합니다.HTTP GET
노출은 발생을 허용하기 전에 고려됩니다.
이것은 너무 늦을 수도 있는 이후에 반대되는 것입니다.
참고: 작업 방법이 중요한 데이터를 반환하지 않는 경우 get을 허용하는 것이 안전합니다.
나의 Wrox ASP에서 추가 읽기.NET MVC3 책
기본적으로 ASP입니다.NET MVC 프레임워크에서는 JSON 페이로드로 HTTP GET 요청에 응답할 수 없습니다.GET에 대한 응답으로 JSON을 보내야 하는 경우 JsonRequestBehavior를 사용하여 동작을 명시적으로 허용해야 합니다.Json 메서드의 두 번째 매개 변수로 Get을 허용합니다.그러나 악의적인 사용자가 JSON 하이잭킹이라는 프로세스를 통해 JSON 페이로드에 액세스할 수 있습니다.GET 요청에서 JSON을 사용하여 중요한 정보를 반환하지 않을 수 있습니다.자세한 내용은 Phil의 http://haacked.com/archive/2009/06/24/json-hijacking.aspx/ 게시물 또는 이 SO 게시물을 참조하십시오.
Haack, Phil (2011).전문 ASP.NET MVC 3(Wrox 프로그래머에서 프로그래머로)(킨들 위치 6014-6020).Wrox. 킨들 에디션.
관련 스택 오버플로 질문
대부분의 최신 브라우저(Firefox 21, Chrome 27 또는 IE 10부터 시작)에서 이는 더 이상 취약성이 아닙니다.
사용자가 쉽게 작업 필터 속성을 만들 수도 있습니다.
public class AllowJsonGetAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
var jsonResult = filterContext.Result as JsonResult;
if (jsonResult == null)
throw new ArgumentException("Action does not return a JsonResult,
attribute AllowJsonGet is not allowed");
jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
base.OnResultExecuting(filterContext);
}
}
그리고 그것을 당신의 행동에 사용합니다.
[AllowJsonGet]
public JsonResult MyAjaxAction()
{
return Json("this is my test");
}
기본적으로 Json 결과 "Deny get"
아래와 같은 방법이 있다고 가정합니다.
[HttpPost]
public JsonResult amc(){}
기본적으로 "Deny Get"입니다.
아래 방법으로
public JsonResult amc(){}
get 또는 use get을 허용해야 할 때는 JsonRequestBehavior를 사용해야 합니다.허용 Get.
public JsonResult amc()
{
return Json(new Modle.JsonResponseData { Status = flag, Message = msg, Html = html }, JsonRequestBehavior.AllowGet);
}
AllowJsonGetAttribute를 mvc-controller(개별 액션 방법뿐만 아니라)에 적용할 수 있도록 함으로써 @Arjen de Mooij의 답변을 약간 개선합니다.
using System.Web.Mvc;
public sealed class AllowJsonGetAttribute : ActionFilterAttribute, IActionFilter
{
void IActionFilter.OnActionExecuted(ActionExecutedContext context)
{
var jsonResult = context.Result as JsonResult;
if (jsonResult == null) return;
jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
var jsonResult = filterContext.Result as JsonResult;
if (jsonResult == null) return;
jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
base.OnResultExecuting(filterContext);
}
}
필요 없습니다.
에 업에다있경이 있다면,HttpPost
속성, 그러면 당신은 설정하는 것에 신경 쓸 필요가 없습니다.JsonRequestBehavior
그리고 그것 없이 과부하를 사용합니다.각 방법에 대한 과부하가 있습니다.JsonRequestBehavior
열거형. 다음과 같습니다.
JsonRequestBehavior를 사용 안 함
protected internal JsonResult Json(object data);
protected internal JsonResult Json(object data, string contentType);
protected internal virtual JsonResult Json(object data, string contentType, Encoding contentEncoding);
JsonRequestBehavior 포함
protected internal JsonResult Json(object data, JsonRequestBehavior behavior);
protected internal JsonResult Json(object data, string contentType,
JsonRequestBehavior behavior);
protected internal virtual JsonResult Json(object data, string contentType,
Encoding contentEncoding, JsonRequestBehavior behavior);
언급URL : https://stackoverflow.com/questions/8464677/why-is-jsonrequestbehavior-needed
'programing' 카테고리의 다른 글
Mac OSX에서 Postgres DB가 시작되지 않음: 오류 메시지: Unix 도메인 소켓의 연결 (0) | 2023.05.06 |
---|---|
Objective-C에서 문자열에 다른 문자열이 포함되어 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.05.06 |
PowerShell을 사용하여 하드 및 소프트 링크 만들기 (0) | 2023.05.06 |
몽고 셸의 모든 사용자를 나열하는 방법은 무엇입니까? (0) | 2023.05.06 |
Python: 목록에 항목 추가 N회 (0) | 2023.05.06 |