2016-11-18 6 views
1

동기화 된 토큰 패턴에서 나는 숨겨진 필드 또는 URL에 항상 CSRF 토큰을 표시합니다. 그것은 아약스 게시물 요청의 끝에 첨부하고 서버가 그것을 사용해야하는지 결정하게 안전합니까? 그것이 왜 사람들이 그것을하지 않는 이유입니까?CSRF 동기화 토큰

답변

0

짧은 답변은 요청이 다른 원산지 (예 : 쿠키에 있지 않은 경우)가 브라우저에 의해 자동으로 전송되지 않는 한 동기화 토큰 패턴에서 토큰을 보내는 방법과 상관 없다는 것입니다). 따라서 "아약스 게시물 요청 끝에 첨부하십시오."(비록 당신이 그 말을 잘 모르겠지만 :)).

ajax 호출없이 전통적인 양식 응용 프로그램에 대해 이야기 할 때 숨겨진 양식 필드가 가장 편리한 방법입니다. 각 양식의 숨겨진 필드에 토큰을 넣기 만하면 클라이언트에서 할 일이별로 없습니다.

아약스는 풍경을 변경하고 아약스 호출은 자동으로 토큰을 전송하지 않으므로 자동으로 처리해야합니다. 예를 들어 jQuery의 경우 훅을 $.ajaxSetup에 사용하면 요청에 토큰을 자동으로 추가 할 수 있습니다. 요청 콘텐츠 유형이 x-www-form-urlencoded 인 경우 다른 양식 변수로 추가 할 수 있습니다. application/json 인 json 요청 일 경우 json 값으로 추가 할 수 있습니다. 그것은 안전 할 것이나, 나는 2 개의 문제를 볼 수있다.

하나는 토큰이 요청에 대한 일종의 "메타 데이터"이며 비즈니스 로직 및 비즈니스 데이터의 일부가 아니라는 것입니다. 또한 쿼리와 관련이없는 데이터 구조 전반에 걸쳐 교차 관심사입니다. 따라서 데이터 구조 밖으로 유지하는 것이 좋습니다.

또 다른 문제점은 beforeSend에 이미 구성된 요청 데이터에 토큰을 추가하는 것이 지루하다는 점입니다. 데이터 구조를 파고 들어 토큰에 대한 변수를 찾아야합니다.

토큰으로 보내는 것이 훨씬 쉽습니다. 사람들이 아약스 요청에 토큰을 추가 할 때 주로하는 일입니다. X-CSRF-Token 또는 이와 유사한 사용자 지정 요청 헤더를 추가하는 것은 매우 일반적이며 서버 쪽에서 토큰을 확인할 수 있습니다.

+0

굉장한 설명! 나는 PHP로하지 않는 전통적인 방법이있다. 그것은 내 응용을 위해 특별히 설계 되었기 때문에 일반적인 지식이 아닙니다. 보안에 대한 우려가 있었는지 궁금한 점이 있습니다. 애플리케이션 보안 문제를 수정하는 데 많은 지식이없고 명백한 결함이나 명백하지 않은 결함이 무엇인지 궁금합니다. –