CSRF란 무엇인가요?
CSRF(교차 사이트 요청 위조), 일명 원클릭 공격/세션 라이딩, 중국어 약자: CSRF/XSRF. CSRF(교차 사이트 요청 위조)는 2007년 인터넷에서 상위 20대 보안 위험 중 하나로 선정된 네트워크 공격 방법입니다. SQL 스크립트 인젝션이나 사이트 간 도메인 스크립트 공격과 같은 다른 보안 위험도 최근 몇 년간 잘 알려졌으며, 많은 웹사이트들이 이에 대해 방어해왔습니다. 하지만 CSRF는 여전히 대부분의 사람들에게 낯선 개념입니다. 가장 유명한 Gmail조차도 2007년 말에 CSRF 취약점이 있었고, 해킹당해 Gmail 사용자에게 막대한 손실을 입혔습니다.
CSRF는 무엇을 할 수 있을까요?
CSRF 공격은 이런 식으로 이해할 수 있습니다: 공격자가 당신의 신원을 훔쳐 당신의 이름으로 악성 요청을 보냈습니다. CSRF는 이메일 발송, 메시지 발송, 계정 탈취, 심지어 상품 구매 및 가상 화폐 이체 등 다양한 일을 할 수 있습니다...... 발생하는 문제로는 개인 프라이버시 유출과 재산 보안이 포함됩니다.
ASP.NET MVC 위조 방지 토큰 위조 방지 마크
ASP.NET MVC에서는 @Html.AntiForgeryToken()이 뷰 페이지에서 사용될 때마다 폼 토큰과 쿠키 토큰이 기본적으로 자동으로 생성됩니다. 하지만 백그라운드에서 수동 검색을 하려면 System.Web.Helpers.AntiForgery 클래스를 사용해야 하며, 소스 코드를 보고 싶어 하는 친구들은 @Html.AntiForgeryToken() 내부 호출 방식이 AntiForgery 클래스와 동일하다는 것을 알게 될 것입니다.
주로 두 가지 정적 방법으로 해당 폼과 쿠키 토큰을 얻는 데 사용됩니다: AntiForgery.GetHtml() 또는 AntiForgery.GetTokens(string oldCookieToken, out string newCookieToken, out string formToken). 하지만 GetHtml 메서드가 호출되면 해당 쿠키 토큰이 자동으로 생성되고, 그 후 토큰 값 숨겨진 필드가 포함된 HTML 코드가 직접 반환되며, 반환된 값은 다음과 같은 형태로 나옵니다:
<input name="__RequestVerificationToken" type="hidden" value="8_nUk_3z0svQr9qcvRBi9SWMZ2-SYmuy9kRe9OgRobGULkb2Z4JZxRZFhR0ndeoy9hmDLDru7MFk-W4xrnL5z5T6VbkfXK7fyRk-egQBGm41"> 숨겨진 필드의 이름은 일반적으로 "__RequestVerificationToken"로 고정되어 있으며, 값은 암호화된 보안 토큰입니다. 이 숨겨진 필드는 보통 제출할 양식에 배치되며, 최종 제출은 쿠키 토큰과 대조됩니다.
GetTokens 메서드를 사용하면 해당 매개변수를 입력한 후 암호화된 폼과 쿠키 토큰을 얻을 수 있지만, 여기서는 해당 값을 직접 저장해야 합니다.
다음으로, 주로 AJAX를 통해 AntiForgeryToken을 수동으로 업데이트하는 방법을 소개하겠습니다.
패키지 코드:
테스트 코드:
우리는 ajax 요청을 보낼 때 아래 그림과 같이 __RequestVerificationToken 매개변수가 자동으로 포함된다는 것을 발견했습니다:
|