In regards to this Haacked blog을 방지하기 위해 HTTP GET에 MVC3의 AntiForgeryToken를 사용하여, 나는 비 REST-을 포함 JSON 하이재킹을 완화에자바 스크립트 CSRF 취약점을
권장 솔루션 이후 제안 된 안티 - JSON GET 하이재킹 솔루션을 구현하기가 주저 해요 전체 JSON POST로 데이터 가져 오기
대체 솔루션 (오브젝트 랩핑)은 타사 컨트롤에서 문제를 일으 킵니다. 소스 코드 액세스 권한이 없습니다.
보안 토큰을 작성하는 방법에 대한 대안 솔루션 (아래 나열 됨)을 구현하는 커뮤니티에서 검증 한 구현을 찾지 못하거나 웹 페이지에서 안전하게 전달할 수 없습니다. 나는 또한 내 자신의 구현을 롤백하는 데 충분한 전문가라고 주장하지 않을 것입니다.
리퍼러 헤더는
배경
This blog JSON 하이재킹 관련, CSRF 문제에 대해 설명에 의존 할 수 없으며 데이터를 얻을 수 JSON 게시물을 사용하는 것이 좋습니다. HTTP POST를 사용하여 데이터를 가져 오는 것이 REST 전체가 아니기 때문에 세션 당 또는 페이지 당 REST 동작을 가능하게하는보다 RESTfull 솔루션을 찾고 싶습니다.
또 다른 완화 기법은 개체에 JSON 데이터를 래핑하는 것입니다. as described here. 다른 기술이 발견 될 때까지 문제가 지연 될 수 있습니다.
나에게
대체 구현, 내 JSON에 대한 GET을의 jQuery HTTP의 사용에 ASP.NET MVC's AntiForgeryToken을 확장 할 자연 보인다. 좀 민감한 데이터를 얻는 경우
예를 들어, 위의 Haacked 링크에 따라, 다음 코드는 취약 : 나는 그것을 권장 POST 해결 방법을 사용하여 데이터를 얻을 수 RESTfull되지 않는다는 것을 동의
$.getJSON('[url]', { [parameters] }, function(json) {
// callback function code
});
. 내 생각은 URL에 유효성 확인 토큰을 보내는 것입니다. 그렇게하면 CSRF 스타일 공격자는 전체 URL을 알 수 없습니다. 캐시되거나 캐시되지 않으면 데이터를 가져올 수 없습니다.
다음은 JSON GET 쿼리를 수행하는 방법의 두 가지 예입니다. 어떤 구현이 가장 효과적인 지 잘 모르겠지만 첫 번째 매개 변수가이 데이터를 캐싱하는 잘못된 프록시로 인해 더 안전하므로 공격자가 취약해질 수 있습니다. 뿐만 MVC3의 AntiForgeryToken 또는 이의 변이체 (see swt) 일 수
http://localhost:54607/Home/AdminBalances/ENCODEDTOKEN-TOKEN-HERE
또는
http://localhost:54607/Home/AdminBalances?ENCODEDTOKEN-TOKEN-HERE
.... 이 토큰은 위에 선택된 URL 형식의 인라인 값으로 설정됩니다.내 자신의 솔루션을 압연에서 저를 방지샘플 질문 (위)는 JSON의 GET (슬래시,와 Questionmark 등)의 유효성을 검사 할 때 사용하는
어떤 URL 형식은 프록시 http://localhost:54607/Home/AdminBalances에 응답합니다 http://localhost:54607/Home/AdminBalances?ENCODEDTOKEN-TOKEN-HERE 데이터가 있습니까?
인코딩 된 토큰을 어떻게 웹 페이지에 전달하겠습니까? 인라인 또는 페이지 변수로?
토큰을 어떻게 작성 하시겠습니까? AntiforgeryToken에 내장되어 있습니까?
AntiForgeryToken은 쿠키를 사용합니다. 이 경우 뒷받침 쿠키를 사용해야합니까/필요합니까? HTTP 전용? HTTP 전용과 함께 SSL은 어떻습니까?
캐시 헤더를 어떻게 설정 하시겠습니까? Google Web Accelerator의 특별한 기능 (예 :
)JSON 요청을 SSL로 만드는 것의 의미는 무엇입니까?
안전을 위해 반환 된 JSON 배열을 여전히 객체에 래핑해야합니까?
어떻게
질문은 위의 I 앞서 단조이 나 자신을 안할거야 이유 마이크로 소프트의 제안 templating and databinding 기능이 솔루션의 상호 운용성있는 것입니다. 말할 것도없이 나는 생각지 못했지만 더 많은 위험을 안고 있습니다. 이 HTTP POST (는 OWASP XSRF Prevention Cheat Sheet에 설명 된 "Double Submit Cookies"기술을 사용)에 의존하는 쿠키에 의존하기 때문에
이것은 CSRF의 변형입니다. – SLaks