programing

JsonRequestBehavior가 필요한 이유는 무엇입니까?

linuxpc 2023. 5. 6. 14:06
반응형

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 기본값:DenyGetJSON 요청과 관련된 매우 구체적인 공격으로부터 당신을 보호하기 위해 허용의 의미가 가능성을 개선합니다.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

반응형