2014-11-17 1 views
5

캐시 된 양식 및 CSRF 토큰을 처리하는 가장 좋은 방법은 무엇입니까? Here 그들은 입력 속성의 JS 덮어 쓰기를 제안하지만 헤더도 캐시하고 싶습니다.조각 캐싱 및 CSRF

답변

4

다음은 다른 방법을 설명하는 문서입니다 : http://www.fastly.com/blog/Caching-the-Uncacheable-CSRF-security/.

짧은 요약 :

  1. ESI를 사용하여 (에지 사이드 포함) : 당신이 토큰 나중에 CSRF 채우기 레일에 자리를 렌더링합니다.
  2. 쿠키에 CSRF 토큰을 포함시키고 javascript를 통해 양식에 복사합니다.
  3. 토큰을 별도의 AJAX 요청으로 가져 와서 javascript를 통해 양식에 복사하십시오.

필자의 의견 :

당신은 ESI를 사용하기위한 특별한 인프라를 설정해야합니다, 그래서 내가 그 솔루션을 좋아하지 않는다. AJAX 요청은 느리고 네트워크 오버 헤드가 많으므로 그 솔루션도 마음에 들지 않습니다. 쿠키 솔루션이나 JS 솔루션을 사용하는 것이 가장 간단한 솔루션이므로 여기에 설명되어 있습니다.

+0

기본적으로 레일스는 CSRF 토큰이 포함 된 모든 양식에 숨겨진 필드를 삽입한다는 사실을 언급하지 않습니다. 이 양식은 여전히 ​​캐시됩니다. 유효하지 않은 토큰 오류가 사라지더라도이 캐시의 다른 사용자에게 사용자 토큰이 누출됩니다. – phylae

1

이 작품은 나를 위해. 나는 이것을 내 application.js에 보관했으며 모든 것이 완벽하게 작동합니다.

$.ajaxSetup({ 
    beforeSend: function(xhr) { 
     var csrf_value = $("meta[name='csrf-token']").attr("content"); 
     xhr.setRequestHeader("X-CSRF-Token", csrf_value); 
    }, 
    });