2010-06-03 3 views
3

그래서 좀 더 안전하고 잠재적으로 CSRF 공격을 막는 데 도움이되는 양식이 있습니다. 숨겨진 필드에 무작위 토큰 값을 추가하고 세션 데이터에 서버 측 값도 저장하려고합니다.양식 보안을 위해 언제 토큰을 발급합니까?

언제 새 토큰을 발행해야합니까? 양식별로? 양식이있는 페이지 당 페이지로드? 세션 당? 양식을 성공적으로 제출하자마자 무효화 할 수 있지만 생성시기는 궁금합니다.

폼이나 페이지마다 발행하는 것처럼 묻습니다. 사용자가 별도의 창을 열고 첫 번째 양식을 제출하면 중복 된 토큰 값을 덮어 쓰지 않아도됩니다. 덮어 쓴 가치)?

답변

1

동시성 문제를 방지하는 가장 간단한 방법은 로그인 당 한 번만 생성하는 것입니다. 공격자가 CSRF를 "추측"할 확률은 PHPSESSID를 훔칠 확률과 거의 같습니다. 또한 사용자의 액세스 수준이 변경 될 때마다 (예 : 암호 변경 등) 언제든지 다시 생성 할 수 있습니다.

철저히하고 싶다면 웹 사이트의 각 양식에 하나씩 토큰 배열을 생성하고 저장할 수 있습니다. 그러나 CSRF 토큰을 훔칠 수 있다면 세션 ID를 도용하여 실제 피해를 입을 수도 있습니다. 당신은 세션 당 하나의 토큰을 사용하는 경우

0
  • 는 당신은 (사용자 가 페이지를 새로 고침 할 때 또는 다시 버튼을 클릭) 중복 제출 양식을 확인하는 기술이 필요합니다.
  • 양식 당 사용하는 경우 사용자가 여러 페이지를 열면 마지막으로 양식 만 작동합니다.
  • 토큰을 제출할 때 배열을 사용하여 세션 당 토큰을 생성하고 을 제거하는 것이 좋습니다. 당신이 높은 볼륨 트래픽 웹 사이트를 가지고 있다면이 접근법은 관심사가 될 수도 읽었습니다.

나는 당신이 이전에이 기사를 읽으면 잘 모르겠지만, 나는 그것이 CSRF 보안에 대한 훌륭한 자원이라고 생각 : http://shiflett.org/articles/cross-site-request-forgeries

관련 문제