CSRF 공격 asp.net 을 방지하기 위해 mvc는 ValidateAntiForgeryToken 위조 방지 공격 기능을 제공하며, asp.net 핵심 프레임워크의 새 버전에서는 Microsoft가 AutoValidateAntiforgeryToken 기능, 특히 ValidateAntiForgeryToken과 AutoValidateAntiforgeryToken을 제공합니다 이 글에서는 차이점이 무엇인지 자세히 설명하겠습니다.
CSRF 개념
CSRF 크로스 사이트 요청 위조는 XSS 공격과 마찬가지로 매우 해롭습니다. 이렇게 이해할 수 있습니다: 공격자가 당신의 신원을 훔쳐 서버에서는 완전히 합법적인 악성 요청을 보내지만, 이메일과 메시지를 당신 이름으로 보내거나 계정을 탈취하거나 시스템 관리자를 추가하거나 심지어 상품을 구매하는 등 공격자가 예상한 행동을 수행합니다. 가상 화폐 이체 등. 웹 A는 CSRF 취약점이 있는 웹사이트이고, 웹 B는 공격자가 만든 악성 웹사이트이며, 사용자 C는 웹 A의 정당한 사용자입니다.
ASP.NET CSRF 공격에 대한 MVC
보기 페이지에서 @Html.AntiForgeryToken()을 사용해 태그를 추가하면, 사용자가 페이지에 접속하면 백엔드가 태그가 포함된 숨겨진 HTML 코드를 자동으로 생성합니다. 다음과 같습니다:
<입력 이름="__RequestVerificationToken" 유형="숨겨짐" value="CfDJ8FBn4LzSYglJpE6Q0fWvZ8WDMTgwK49lDU1XGuP5-5j4JlSCML_IDOO3XDL5EOyI_mS2Ux7lLSfI7ASQnIIxo2ScEJvnABf9v51TUZl_iM2S63zuiPK4lcXRPa_KUUDbK-LS4HD16pJusFRppj-dEGc" /> 백그라운드 컨트롤러는 [검증 안티포지리토큰] 기능은 양식 제출 위조를 방지하기 위한 것입니다.
ValidateAntiForgeryToken과 AutoValidateAntiforgeryToken은 다릅니다
AutoValidateAntiforgeryTokenAuthorizationFilter는 ValidateAntiforgeryTokenAuthorizationFilter를 계승하지만, ShouldValidate 메서드만 다시 작성합니다.
AutoValidateAntiforgeryToken 속성은 모든 보안이 취약하지 않은 HTTP 메서드에 대해 위조 방지 토큰을 검증하도록 합니다.GET, HEAD, OPTIONS, TRACE 외의 HTTP 메서드는 모두 위조 방지 토큰을 필요로 합니다。 이 필터는 기본적으로 애플리케이션의 위조 방지 토큰 검증을 트리거하는 글로벌 필터로 적용될 수 있습니다.
하이퍼링크 로그인이 보입니다.
AutoValidateAntiforgeryTokenAttribute는 AutoValidateAntiforgeryTokenAuthorizationFilter 호출을 검증하며, 이 호출은 다음에서 상속됩니다 ValidateAntiforgeryTokenAuthorizationFilter,ShouldValidate 메서드가 다시 작성되었으며, true를 반환하면 검증이 필요하며, false를 반환하면 검증되지 않습니다, 아래 그림에서 볼 수 있습니다:
소스 코드 분석:
AutoValidateAntiforgeryTokenAttribute는 POST, PUT, PATCH, DELETE와 같은 모든 불안전한 메서드에 전역적으로 위조 방지 토큰 검증을 적용할 수 있게 합니다. 따라서 [ValidateAntiForgeryToken] 속성을 모든 동작에 추가할 필요는 없습니다.
사용하려면 ConfigureServices의 Startup 클래스 메서드에 다음 코드를 추가하세요:
위조 방지 인증을 무시해야 한다면, [AntiforgeryToken 무시하세요행동에 귀속된다.
때로는 컨트롤러에서 여러 요청을 태그해야 하면서도, 위조할 필요가 없는 요청(예: 다양한 GET 기반 연산)이 필요할 수도 있습니다. 과정을 더 편리하고 편안하게 만들기 위해 사용할 수 있는 여러 도구가 있습니다. 첫 번째는 AutoValidateAntiforgeryToken 속성입니다. 이 기능은 ValidateAntiForgeryToken 속성과 유사하게 작동합니다. 하지만 데이터 검색을 위해 설계된 메서드인 GET, HEAD, OPTIONS, TRACE 같은 동작은 자동으로 무시합니다. 이를 통해 데이터를 변경할 수 있는 모든 방법에 위조 방지 방법을 빠르고 쉽게 추가할 수 있으며, 데이터 검색에 영향을 주지 않습니다.
다음 코드는 AutoValidateAntiforgeryToken 속성의 예시입니다:
이 예시에서는 일반적인 인덱스 연산(GET)이 출처와 관계없이 작동하지만, POST 메서드를 이용한 인덱스 연산과 Delete 메서드로서의 RemoveUser 연산은 클라이언트가 위조 방지 토큰을 사용해야 합니다.
관련 정보를 맞춤화하세요
많은 사람들이 생성된 숨겨진 도메인 이름을 자신의 이름으로 대체할 수 있는지, 쿠키 이름을 자신의 이름으로 바꿀 수 있는지 궁금해할 수 있습니다.
답은 예입니다. 간단히 시연해 봅시다:
Startup의 ConfigureServices 메서드에서 기본 이름을 변경하기 위해 다음 항목을 추가하세요.
참고: asp.net CORE와 asp.net 의 가장 큰 차이점은,코어는 헤더를 요청하여 검증 매개변수를 전달하는 것을 지원합니다형태를 만들려는 게 아니야!
private const 문자열 AntiforgeryTokenFieldName = "__RequestVerificationToken"; private const 문자열 AntiforgeryTokenHeaderName = "RequestVerificationToken";
소스 코드를 확인할 수 있습니다:하이퍼링크 로그인이 보입니다.
테스트 코드:
결과: test1 메서드에 접근하면 400 오류가 나오고, test2 메서드에 접근하면 통과한 str 매개변수가 반환되며, AutoValidateAntiforgeryToken 기능이 GET 요청을 가로채지 않는 것을 확인할 수 있습니다.
(끝)
|