2010-02-24 2 views
0

방금 ​​CSRF에서 Doctype's 에피소드를 보았습니다.CSRF 및 변경 토큰

CSRF에 대한 최선의 예방책은 일부 사용자 고유 데이터 (예 : 세션 ID 해시)로 토큰을 생성 한 다음 요청과 함께 게시하는 것입니다.

추측하기 어려운 값 (예 : GUID)을 생성하고이를 세션 변수로 저장하여 페이지에 숨겨진 필드로 저장하는 것이 안전하지 않습니까?

페이지가로드 될 때마다 값이 변경되지만 POST 된 데이터의 테스트는 그 전에 올 것입니다.

이것은 마치 나처럼 안전합니다. 내가 잘못?

+0

가능한 복제본 : http://stackoverflow.com/questions/2250263/csrf-protection-by-storing-nonce-in-session-variable-and-form – Marius

+0

감사합니다. Marius. 내가 찾을 때 찾지 못했습니다. –

답변

5

어디에서 토큰을 가져올 지 추측하거나 결정할 수없는 한 흥미로운 것은 아닙니다. 그러나 각 요청에 대해 새 토큰을 생성하는 것에주의하십시오. 이는 사이트에 두 개 이상의 브라우저 탭을 열어 놓은 사용자가 사이트를 사용할 수 없음을 의미합니다. 사용자의 세션 기간 동안 하나의 토큰 값을 유지하면이 문제를 피할 수 있습니다.

모든 요청마다 토큰을 변경하면 틀림없이 더 안전합니다. 그러나 페널티가 너무 높다고 간주 될 수 있습니다. 보안과 관련하여 거의 모든 것과 마찬가지로 사용자 경험의 편의성에 대한 절충점을 찾아야합니다. CAPTCHA를 즐기는 한 명의 사용자를 찾습니다. 보안과 사용자 편의성 모두에서 응용 프로그램과 사용자의 올바른 균형을 찾는 것이 중요합니다.

이 CSRF에 좋은 읽기 (그리고 훨씬 더) 토큰 보호 페이지에 하나의 크로스 사이트 스크립팅 취약점을 가지고 있다면, 당신의 CSRF 토큰이 있다는 Open Web Application Security Project

는 또한 명심에서 이상 지금 쓸모 없어. OWASP XSS (Cross Site Scripting) Prevention Cheat Sheet도 참조하십시오.

+0

나는 여러 개의 탭에 대해 생각하지 않았다. 감사합니다 Cheekysoft! –