2013-04-02 3 views
9

CSRF에서 보호되는 ASP.NET 웹 API를 사용하여 API를 만들 수있는 방법을 이해하고 있지만 웹 이외의 환경 (예 : 기본 모바일 응용 프로그램)에서는 액세스 할 수 있습니다.ValidateAntiForgeryToken은 웹 또는 기본 응용 프로그램을 통해 액세스 할 수있는 웹 API에 어떻게 맞습니까?

첫 번째 생각은 게시 된 양식이 없기 때문에 비 웹 환경이 위조 방지 토큰 유효성 검사를 통과 할 수 없다는 것입니다. 사실입니까? 유효성 검사 작업을 수행 할 수있는 방법이 있습니까?

유효성을 검사 할 방법이없는 경우 제 2의 생각은 웹 호출에 대해 위조 토큰을 검증하는 API를 제공하는 것이지만 웹 호출이 아닌 것에 대해서는 검증하지 않는 것입니다. 그러나 공격자가 CRSF 공격에이 "비 웹"API를 쉽게 사용할 수있는 것처럼 보입니다. 맞습니까?

비 웹 API가 비 웹 인증 메커니즘 (OAuth?) 만 지원하면 브라우저를 통해 요청을 재생할 수 없다는 대답입니까? 아니면 더 간단한 방법이 있습니까?

이것이 유일한 방법 인 경우 모든 안전하지 않은 인증 메커니즘을 끄는 쉬운 방법이 있습니까? 이 시나리오를 지원하기 위해 ASP.NET 웹 API에 다소 간단한/행복한 경로가 있어야하지 않습니까?

답변

5

CSRF는 쿠키, 기본 인증, NTLM 등과 같은 영구 인증 메커니즘을 사용할 때만 문제가됩니다. Mike Wasson은 자바 스크립트에서 webapi에 대해 CSRF를 사용하는 an example을 가지고 있으며 DelegatingHandlers에서 버전을 보았습니다.

CSRF는 웹 시나리오에서만 문제이므로 비 웹 요청을 확인할 필요가 없다고 주장 할 수 있습니다. jquery, 네이티브 XmlHttpRequest 클래스 또는 기타 헤더와 함께 제공되는 X-Requested-With를 통해 브라우저의 모든 아약스 요청 (XMLHttpRequest 값 포함). 그래서 당신은 CSRF 검사가 헤더없이 요청에 의해서만 제한 될 수 있습니다.

당신이 인증하는 경우 일종의 공유 된 비밀 또는 OAuth 메커니즘을 살펴보고 유효성을 검사 할 DelegatingHandler 서버 측을 가지고 웹 응용 프로그램에 토큰을 놓을 수 있다고 말한 것 자바 스크립트를 통해 집어 들고 X 인증 헤더를 통해 전송됩니다. 이는 지속성이 없으며 모든 요청 (CSRF 토큰처럼)에 첨부해야하므로 CSRF 문제가 없습니다. Dominick, 언제나처럼, documents 이런 종류의 일이 잘.

+1

까지 "X-Requested-With"헤더는 jquery와 같은 프레임 워크만으로 요청에 넣지 않습니다. – danatcofo

0

최신 MVC4 업데이트의 SPA 템플릿을 확인하십시오. 웹 API 용 Anti-CSRF에 대한 샘플 구현이 있습니다.

+1

이미 (DotNetNuke Services Framework를 통해) anti-CSRF 구현이 있습니다. 네이티브 앱에서 어떻게 작동하는지 이해하려고합니다. AJAX 나 POST가 없다면 API가 작동하도록 SPA 템플릿에 아무것도 표시되지 않습니다. – bdukes

0

WebAPI에 대한 CORS 구현을 살펴보십시오.

http://blogs.msdn.com/b/carlosfigueira/archive/2012/07/02/cors-support-in-asp-net-web-api-rc-version.aspx

그런 다음 당신은 단지 webapi 서버에 유효한 URI로 localhost를 허용 할 수 있습니다. 이렇게하면 다른 사이트가 브라우저에서 공격 코드를로드하지 못하게됩니다.

+1

localhost로 제한하는 것이 기본 모바일 응용 프로그램에 도움이되지 않는 것 같습니다. – bdukes

+0

음 클라이언트에서 로컬로 실행되는 phonegap을 사용하고있었습니다. – PatrickR