CSRF 보호 드루팔 호스팅
나는 CSRF 공격으로부터 보호해야하고 여러 질문이 몇 가지 PHP POST 스크립트를 가지고 :
내가 HTML 양식없이 jQuery를 사용하여 PHP로 POST 요청을 제출할 경우 1) 단지가 될 나는 CSRF의 위험에 여전히하고있는 HTML 요소에서 값을 직접 받고 jQuery를 사용하여 제출?
2) 웹 사이트에 로그인하면, 내가 세션 변수에 고유 토큰을 저장합니다. 세션 변수를 설정하고 내가 전에 설정 한 것과 같은 값을 가지는 경우 PHP POST 스크립트에서 나는 확인한다. 그 충분하지 않다? 토큰이뿐만 아니라 HTML 양식에 포함되어야하는 이유가 필요한가?

23시 43분에서 11월 15일 '14 요청
- 예. 그것은 당신이 요청을 구성하는 방법을 중요하지 않습니다, 공격자는 같은 방법으로 하나를 구성 할 수 있습니다. (이론적으로 다른 사이트가 전체 요청을 복제하기 위해 사용자의 브라우저를 얻을 수 있도록,) 필수 CORS 프리 플라이트 요청을 발생하게 복잡한 요청의 기능을 (만들 수 있지만, 그에 따라 싶지 않을 것이다) .
- 아니
토큰의 포인트는 요청에가는 것을 결정에 대한 책임이있는 코드 (즉, 폼이나 JavaScript)를 포함하는 페이지가 웹 사이트에 페이지 것을 확인하는 것입니다.
양식 (또는 자바 스크립트) 페이지의 HTML에서 (세션에서 하나와 일치) 토큰을 읽고 요청에 넣을 수 있다면, 당신은 요청을 구축 코드가 귀하의 사이트에서 온 알고있다.
당신은 그냥 세션에 있음을 선택하면 다음 검사하는 모든 사용자가 토큰 (대개 숨겨진 프레임에있을 수 있습니다 귀하의 사이트 ... 모든 페이지를 방문 의미) 생성되는 원인이 된 점이다.
승인. 어떤 공격자가 숨겨진 iframe을에 내 웹 사이트의 실제 HTML 양식을 포함 할 수있는 JS가있는 경우에 대해. 에 로그인 한 상태에서 사용자가 공격자의 웹 사이트를 방문 할 경우 내가 다른 예에서 본 한 토큰은 형태에 포함되지 않습니다? 이 경우 요청은 토큰 형태로 세션에이 아니면 내가 뭔가를 놓친 거지로 본격적인 것입니까? - 23시 58분 마이클 사무엘 11월 15일 '14
폼 내부 프레임을 넣으면 번호, 프레임에 의해로드 된 페이지의 필드는 폼 데이터에 포함되지 않습니다. 당신은 자바 스크립트 프레임을 통해 도메인에서 데이터를 읽을 수 없습니다 (사이트가 아니면되지 않을 것 PostMessage를,와 공동 운영). - 0시 2분에서 쿠엔틴 11월 16일 '14
네, 그것은 여전히 안전하지 않은
CSRF 토큰은 폼을 생성 할 때마다 새로 생성 된 토큰해야한다. 그것은 각 요청에 대한 독특하고 예측할 수 있어야합니다. 로그인에서 설정할 세션 토큰은 전체 기록 된 세션에 대해서만 고유합니다.
당신이 확인 생성 된 토큰을 게시하지 않는 경우에, 당신은 어디를 확인합니까? 당신과 세션 토큰을 일치합니다. 그 이유는 왜 토큰을 요청 자체로 전송되지 않은 경우 당신은 여전히 사람들에게 요청 위조를 할 수있는 가능성을 제공 할 수 있기 때문이지만, 모든 검사가 세션 / 쿠키에 의해 수행된다. 만 세션을 선택하면이 CSRF에 대한 아무것도하지 않습니다. 이 요청 자체에 전송하고 세션과 일치하는 경우 확인해야합니다. 각 요청에 대해 고유 한 토큰을 생성 할 때, 나쁜 사람은 누군가의 요청을 위조 할 수 없다.

23시 55분에서 11월 15일 '14 대답