본문 바로가기
web development

meta name="csrf-param" 태그는 뭘까?

by summer_dev 2024. 2. 12.

meta name="csrf-param" 태그는 뭘까? 

 

SEO를 잘 활용한 웹사이트들을 스터디하면서 우리 회사 페이지에 벤치마킹하는 작업을 하고 있다. 

 

오늘은 당근의 태그들을 구경하면서 처음 보는 태그가 나와서 정리해본다. 

해당 태그는 아래와 같다.

<meta name="csrf-param" content="authenticity_token"/>
<meta name="csrf-token" content="authenticity_token"/>

1. CSRF란? 

csrf는 Cross-Site-Request-Forgery의 줄임말로 사용자가 서버에 의도하지 않은 공격을 하게 되는 위조 요청의 줄임말이다. 

위키피디아의 CSRF의 설명은 다음과 같다. 

Cross-site request forgery, also known as one-click attack or session riding and abbreviated as CSRF (sometimes pronounced sea-surf) or XSRF, is a type of malicious exploit of a website or web application where unauthorized commands are submitted from a user that the web application trusts.

Source: https://en.wikipedia.org/wiki/Cross-site_request_forgery

 

Cross-site request forgery - Wikipedia

From Wikipedia, the free encyclopedia Malicious website exploit where unauthorized commands are transmitted from a trusted user Cross-site request forgery, also known as one-click attack or session riding and abbreviated as CSRF (sometimes pronounced sea-s

en.wikipedia.org

 

여기서 말하는 사용자가 의도하지 않은 공격은, 악성 요청(malicious request)의 생산자, 즉 공격자가 의도한 행동(예: 비밀번호 변경, 이메일 주소 변경 등)을 웹 애플리케이션을 통해 수행하도록 만드는 것이다. 

 

따라서 웹 서비스 제공자는 `csrf` 태그를 통해서 해당 요청이 실제 사용자로부터 온 것인지를 확인하는 매커니즘이다. 

 

이 보호 매커니즘을 작동시키기 위해서 클라이언트 사이드에서는 `head` 태그 내에 `csrf-param` 프로퍼티를 이용해서 토큰의 이름을 정의하고, `csrf-token` 프로퍼티를 이용해 해당 세션의 토큰을 서버로 보내 요청을 검증한다. 

 

2. CRSF의 작동 방식

 

1) 서버는 각 사용자 세션에 대해 고유한 CSRF 토큰을 생성한다. 

 

2) HTML 문서 내에서 `csrf-param` 프로퍼티를 사용하여, 서버가 요구하는 파타미터의 이름을 정의한다. 보통 `authenticity_token`이라는 이름을 사용한다. 

 

3) `csrf-token`프로퍼티에 실제 토큰 값을 담는다. 

 

4) 사용자가 로그인, 회원 가입 등에서 폼을 제출할 때, 자바스크립트가 메타 태그들에서 CSRF 토큰의 이름과 값을 받아와 폼 데이터에 해당 토큰을 자동으로 추가한다. 

 

5) 서버에서 받은 폼 데이터에서 함께 제출된 CSRF 토큰을 저장된 토큰과 비교하고, 유효한 토큰일 경우 계속 처리한다. 토큰이 일치하지 않거나 토큰 자체가 누락된 경우 요청을 거부한다. 

 


 

3. 정리 

CSRF 공격은 사용자가 로그인한 웹사이트에서 원치않는 작업을 수행하도록 하는 악의적인 공격이다. 이러한 공격은 사용자의 입력을 통해 서버에 데이터를 전송하는 동작에서 주로 발생하며, CSRF 토큰은 사용자의 그러한 동작에 대해 유효한 사용자의 의도를 확인하기 위해 사용하는 것이다. 

따라서, 현재 내가 담당하고 있는 웹 페이지처럼 단순히 콘텐츠를 보여주는데 그치는 경우라면 CSRF 검증 매커니즘은 불필요할 수도 있다. 

 

 


참고:

https://en.wikipedia.org/wiki/Cross-site_request_forgery

 

Cross-site request forgery - Wikipedia

From Wikipedia, the free encyclopedia Malicious website exploit where unauthorized commands are transmitted from a trusted user Cross-site request forgery, also known as one-click attack or session riding and abbreviated as CSRF (sometimes pronounced sea-s

en.wikipedia.org

https://junhyunny.github.io/information/security/spring-boot/spring-security/cross-site-reqeust-forgery/#1-csrf-cross-site-request-forgery

 

CSRF(Cross-Site Request Forgery) 공격과 방어

<br /><br />

junhyunny.github.io

https://tibetsandfox.tistory.com/11

 

CSRF(Cross Site Request Forgery)란?

CSRF란? CSRF는 Cross Site Request Forgery(사이트 간 요청 위조)의 줄임말로 웹 취약점 중 하나입니다. 공격자가 희생자의 권한을 도용하여 특정 웹 사이트의 기능을 실행하게 할 수 있으며 이는 희생자

tibetsandfox.tistory.com

 

 

 

공부한 내용을 정리한 포스팅입니다. 

틀린 내용이 있다면 댓글로 알려주세요!