it-swarm-korea.com

언제 양식에 CSRF 보호를 사용하지 않아야합니까?

기본적으로 토큰을 사용하는 모든 양식에 대한 CSRF 보호 기능이 있습니다.

그러나 내 양식 중 하나와 유사한 기능을 가진 다른 웹 응용 프로그램을 발견했습니다. 그리고 CSRF 토큰을 사용하지 않았습니다.

그래서 나는 그들이 그 형태에 대한 CSRF 공격으로부터 보호하지 않는다고 생각했습니다.

그래서

질문 1) CSRF 토큰 외에 CSRF로부터 보호 할 수있는 다른 방법이 있어서는 안 되나요?

대답은 이것이 유일한 방법이라고 가정하고 있습니다. 따라서 내 주요 질문은

질문 2) 언제 CSRF 보호를 사용하지 말아야합니까?

POST 양식이 외부 URL을 대상으로하는 경우) 한 가지 가능한 인스턴스를 알고 있습니다.

Django docs 에서 읽었습니다.

CSRF 보호를 사용하지 않아야하거나 불필요한 다른 경우가 있습니까?

[~ # ~] 업데이트 [~ # ~]

a) CSRF 보호의 다른 방법에는 사용자 재 인증이 포함됩니다.

b) 사용자가 로그인 할 필요가 없을 때 양식 POSTBACK을 위해 CSRF로부터 보호하지 않고 벗어날 수 있습니다. (nbnh의 답변 및 의견 참조)

6
Kim Stacks

아니요, 토큰은 CSRF로부터 안정적으로 보호 할 수있는 유일한 방법이 아닙니다.
사실, 패키지 라이브러리가 추천을받을 수있을만큼 충분히 성숙 된 것은 최근에야 자신의 롤링이 상황을 악화시킬 가능성이 높기 전에였습니다.

CSRF로부터 보호하는 또 다른 방법은 재 인증입니다. 즉 사용자에게 비밀번호를 다시 묻습니다.
이 접근 방식의 장점은이 기술이 개발자에게 친숙하고 엉망이 될 가능성이 없다는 것입니다. 단점은 사용자에게 투명하지 않다는 것입니다.
요즘에는 대부분의 프레임 워크에 보호 기능이 내장되어 있고 추가 라이브러리를 사용할 수 있으므로 CSRF 토큰이 선호되고 있지만 이것이 유일한 방법은 아닙니다.

Q # 2에 관해서는 @nhnb가 올바르게 썼 듯이 수정이 일어나지 않으면 might 보호를 생략해도 괜찮습니다.
현재 프레임 워크에서 그것이 얼마나 사소한 지, 사용자 투명성 및 최소한의 오버 헤드를 고려할 때, 당신은 아마 그대로두고 그것을 꺼내기 위해 코드와 싸우지 않는 것이 낫습니다.

4
AviD

예, 토큰을 사용하는 것이 CSRF 공격으로부터 안정적으로 보호 할 수있는 유일한 방법입니다.

보호가 필요한지 여부는 제출 된 데이터로 프로그램이 수행하는 작업에 따라 다릅니다.

일반적으로 현재 사용자의 권한 또는 컨텍스트로 데이터가 수정되는 경우 보호가 필요합니다.

수정이 이루어지지 않으면 보호하지 않아도됩니다. 일반적인 예는 검색 양식과 결과입니다. 어떤 사용자가 어떤 검색을 수행하는지 기록하는 것은 일종의 수정이므로 양식을 보호해야합니다.

7