2011-01-22 4 views
8

아약스와 함께 제출 된 양식에 문제가 있습니다. Zend Framework로 제 양식을 만듭니다. 일부는 실제 양식이므로 해시 요소를 추가합니다. 다른 것들은 작은 작업 (여기 upvote 및 downvote 같은)에 대한 링크를 그래서 그들.아약스의 CSRF 토큰

제 문제는 특히 작은 양식 (링크)에 아약스를 사용해야한다는 것입니다. 나는 많은 질문을 보지만 그 문제를 해결할만큼 포괄적 인 것은 아무것도 없다. ajax를 통해 양식을 제출할 때 csrf 토큰이 원활하게 작동하는 방법에 대한 자세한 설명이 있습니까? 젠드 프레임 워크를 사용하는 것이 좋지만 일반적인 PHP 응답도 도움이 될 것입니다.

답변

7

CSRF 토큰이 필요하지 않습니다. 귀하는 HTTP_X_REQUESTED_WITH 방법을 사용합니다 (예 : here 참조).

+0

이 질문에서 REQUESTED_WITH 헤더에 대해 읽었습니다. http://stackoverflow.com/questions/3664044/anti-csrf-token-an d-javascript/3665136 # 3665136 그러나 Rook (및 응답 자체)의 의견은 실제로 안전하지 않다고 말합니다. 그래서 제가 그것을 사용한다면, 나는 여전히 "다른 것"을 추가 할 필요가 있다고 생각합니다. 당신 의견은 뭐니? – samquo

+0

@samquo 하하 나는 내 이름이 어떻게 SO 보안에 관해서 좋아 하는지를 좋아한다. XHR과 동일한 원산지 정책으로 인해 x_requested_withexploitable을 확인하면 사실입니다. – rook

+2

BTW, 당신은 단지 REQUESTED_WITH를 신뢰하는 것 이외의 다른 행동을 조사하고 싶을 것입니다. 레일즈와 장고가 최근 보호되어 충분하지 않을 수도있는 인스턴스를 설명하기 위해 최근 업데이트되었습니다. Django의 업데이트에 대한 참고 사항은 다음과 같습니다. http://is.gd/JLBrfL Zend를 사용하여이를 수행하는 방법을 잘 모르겠습니다. CSRF 및 AJAX를 검색하면서이 문제를 발견했습니다. – Rob

0

이 페이지에 오는 사람들에게 ajax로 작업하는 csrf를 얻을 수 있습니다. 당신이 작업이 끝나기 전에이 권리를 추가로 사용하여 해시를 다시 생성 할 필요가 컨트롤러에서

:

$ 형상 -> hash-> initCsrfToken();

$ this-> view-> csrfhash = $ form-> hash-> getValue();

다음 JS에서

당신이 아약스를 할 때 사용하는 파일을, 당신은이 (그래서 JQuery와 생성 될 때 해시의 인스턴스를 찾기 위해 선택기를 사용하는 것이 필요 해요

$ (# 해시) .replaceWith (csrfhash).. 당신이 ID와 이름을 포함한 전체 숨겨진 CSRF 요소를 대체하는거야하지만 그 부분은 할 매우 쉽게해야 replaceWith를 사용하여 실제로 경우