2010-11-26 2 views
1

자동차 목록이있는 자동차보기가 있습니다 ... 그래서 Modal (UI JQuery 대화 상자)을 여는 만들기 버튼이 있습니다. 사이트/자동차/컨텐츠를 만들기 ...모달 문제가있는 MVC Crud 설계 (직접 액세스가 동작 만들기를 허용하지 않음)

모두 잘 작동합니다 ...하지만 더 낫다고가에 직접 액세스 차단 같은 : 사이트/자동차/만들기 ...

는 것이 가능할까요? 방법? 그것은 가능 정말 아니다

감사

답변

3

는 완전히 차단하는,하지만 당신은 더 어렵게 만드는 몇 가지 일을 할 수있다. 먼저, POST 요청에서 온 것을 요구하십시오. 그러면 누군가가 요청 매개 변수로 URL을 간단히 입력하지 못하게됩니다. 둘째, 위조 방지 토큰 도우미를 사용하십시오. 이렇게하면 토큰 입력과 토큰 쿠키가 모두 필요하기 때문에 제 3자가 URL에 대한 POST를 수행하는 것을 방지 할 수 있습니다. 셋째, 요청에 X-HTTP-REQUESTED-WITH 헤더가 있는지 확인하고 AJAX를 통해 POST (또는 GET) 만 수행 할 수 있습니다. 주위를 둘러 보는 것은 그리 어렵지 않지만 GET을 사용하면 우발적 인 액세스를 막을 수 있습니다. 넷째, 승인 된 사용자 만 AuthorizeAttribute를 사용하여 작업에 액세스 할 수 있도록해야합니다. 다섯째, FireSheep을 사용하여 무단 액세스를 방지하고 쿠키 및 데이터를 스누핑으로부터 보호하기 위해 SSL을 사용하십시오.

간단히 말해서 합법적 인 승인을받은 사람이 사용자 인터페이스를 사용하지 않고도 원하는 작업을 요청하지 못하게 할 수는 없습니다. 그들은 항상 당신이 보내는 것과 똑같이 보이는 요청을 만들 수 있습니다. 하지만 위의 방법을 사용하면 실수로 액세스하는 것을 더 어렵게 만들 수 있습니다.

1
[AttributeUsage(AttributeTargets.Method)] 
public class AjaxOnlyAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (!filterContext.HttpContext.Request.IsAjaxRequest()) 
     { 
      filterContext.HttpContext.Response.StatusCode = 404; 
      filterContext.Result = new HttpNotFoundResult(); 
     } 
     else 
     { 
      base.OnActionExecuting(filterContext); 
     } 
    } 
} 

그리고이처럼 만들기 활동에 스틱 :

[AjaxOnly] 
public ActionResult Create() 
{ 
    ...etc 
} 
관련 문제