2013-10-21 3 views
-1

asp.net mvc3을 사용하여 응용 프로그램을 개발하고 있습니다.ASP.NET MVC ajax 호출 보안 문제

나는 CSRF를 aniforgerytoken으로 보호하고 있습니다.

DataGrid 위의 삭제 버튼이 있다고 상상해보십시오. 사용자가 버튼을 클릭하면 아약스 호출은 선택한 항목의 ID를 국가/삭제 동작에 게시합니다.

문제는 사용자가 요청의 ID를 변경하려고 시도 할 수 있다는 것입니다 (소스 코드 페이지를 살펴보면 $ .post (...)가 표시됨). 그래서 선택되지 않은 국가는 삭제할 수 있습니다. 최악의 경우에는 삭제할 수있는 권한이 없습니다.)

내 페이지를 다시 보호하려면 어떻게해야합니까? 사용자가 항목을 삭제할 권한이 실제로있는 경우 삭제 작업을 확인하고 싶지 않습니다.

나는 ajax 호출 해싱에 대해 들었지만 MVC에서 유용한 자습서 나 할 일을 찾지 못했습니다.

+1

"_ 사용자가 실제로 항목을 삭제할 수있는 권한이있는 경우 삭제 작업을 확인하십시오 ._"이것은 답변입니다. 일반적으로 인증, 권한 부여, 유효성 검사 또는 보안과 관련된 모든 작업이 서버에서 완료되어야합니다. –

답변

0

나는 클라이언트 측에서 아무 것도 할 필요가 없다고 생각합니다. 대신 서버 측에서 사용자가 삭제하도록 선택한 국가를 삭제할 수있는 권한이 있는지 확인하고 삭제할 수있는 권한 만 삭제하십시오.

0

당신이

[Authorize] 
[ValidateAntiForgeryToken] 

아래 당신은 또한 다음

public class HttpAjaxRequestAttribute : ActionMethodSelectorAttribute 
{ 
    public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo) 
    { 
     if (!controllerContext.HttpContext.Request.IsAjaxRequest()) 
     { 
      throw new Exception("This action " + methodInfo.Name + " can only be called via an Ajax request"); 
     } 
     return true; 
    } 
} 

다음이 사용자 정의 속성을 사용할 수있는 가져 오기 사용

[Authorize] 

를 사용하는 경우 사용 후를 사용하는 경우 다음과 같이 행동을 꾸미십시오.

[Authorize] 
[HttpAjaxRequest] 

public ActionResult FillCity(int State) 
{ 
    //code here 
} 

"Mark/Tick"으로 문제가 해결되면 꼭 기억하십시오.

+0

이것이 문제를 해결할 수 있다면 "Mark/Tick"을 기억하십시오. - 진지하게? 질문은 거의 4 세이고 OP는 2016 년에 마지막으로 보았습니다 ... – jps

+0

OP에 유용하지 않으면 다른 사람에게 유용 할 수 있습니다. – MaxyDav