2009-02-05 7 views
7

asp.net에서 CSRF 공격을 완화하기 위해 IHttpModule을 구현 중입니다. 그것은 응답 HTML에 GET에 asp.net SessionID와 함께 숨겨진 양식 매개 변수를 주입합니다. 그런 다음 POST에서 숨겨진 매개 변수의 값이 현재 SessionID와 일치하는지 확인합니다. 내가 아는 한, SessionID 값을 얻는 유일한 방법은 악의적 인 사이트에서 읽을 수 없거나 결정할 수없는 쿠키에서 가져 오는 것입니다. 내가 간과 할 것이 있습니까?CSRF 유효성 검사 토큰 : 세션 ID가 안전합니까?

답변

8

이 방법은 올바른 것입니다. XSRF 보호를 POST에만 적용하기 때문에 GET 작업을 통해 사용할 수있는 모든 작업을 "안전"해야합니다 (어쨌든 모범 사례입니다).

추가 보험의 경우, 모든 링크에 URL 매개 변수를 추가하고 모든 GET 요청에서 해당 매개 변수를 확인함으로써 GET에도 사용할 수 있지만 성가시다.

추가 편집증 환자 인 경우 대체 ID에 다른 임의의 번호를 선택할 수 있습니다. 브라우저가 다른 사이트의 악의적 인 자바 스크립트에 세션 쿠키를 액세스 할 수 없게 만들지라도이 경우에도 사용자를 보호 할 수 있습니다. 세션이 생성되면 다른 큰 난수를 선택하여 세션에 저장하십시오.

+0

http가 상태를 바꿀 수는 없지만 (분명히 가능할 수 있기 때문에) 지금 당장은 GET에 대해 걱정하지 않을 것입니다. 우리가 대회/표준을 지키는 한 우리는 잘되어야합니다. 내가 언급 한 것처럼 추가 보안을 위해 SessionID가 아닌 다른 값을 사용하여 조사 할 수 있습니다 - 감사합니다. – ironsam

6

이상적으로는 세션 ID 이외의 것을 사용하고 싶을 수도 있지만 기본적으로는 그게 전부입니다. OWASP는 사용자 세션에 저장된 임의의 양식 요소 이름을 사용하도록 제안합니다. 이렇게하면 공격자는 올바른 숨겨진 필드를 위조 할 수 없습니다.

http://www.owasp.org/index.php/Top_10_2007-A5#Protection

+0

양식 요소 이름을 무작위로 추출하는 것은 흥미로운 아이디어입니다. 링크를 가져 주셔서 감사합니다. – ironsam

관련 문제