미소를뿌리는감자의 코딩

CORS & CSRF Problem 본문

코딩 이야기

CORS & CSRF Problem

미뿌감 2024. 6. 3. 19:37
728x90

https://spring.io/guides/gs/messaging-stomp-websocket

 

Getting Started | Using WebSocket to build an interactive web application

In Spring’s approach to working with STOMP messaging, STOMP messages can be routed to @Controller classes. For example, the GreetingController (from src/main/java/com/example/messagingstompwebsocket/GreetingController.java) is mapped to handle messages t

spring.io

 

이를 참조하여 webSocket을 구현하면서, 

Issue를 확인하게 되었다.

그곳에서 CORS를 추가하지 않으면 예제가 실행되지 않는다고 말해주었다.

즉, 

 

registry.addEndpoint("/greeting-websocket");

registry.addEndpoint("/greeting-websocket").setAllowedOrigins("*")

 

이렇게 적어야 한다고 하였다.

 

1. CORS

CORS ( Cross-Origin Resource Sharing ) 의 약자

 

웹 애플리케이션이 동일 출처 정책 (Same-Origin Policy)에 의해 제한되지 않고, 다른 출처의 리소스에 접근할 수 있도록 하는 것이다.

이를 통해, 웹 애플리케이션이 API 서버와 같은 (여기서는 STOMP 서버)에 접근할 필요가 있을 때, 차단되지 않고 접근이 가능하도록 하는 것이다.

 

하지만 이는 보안과 접근성에서 중요한 측면이므로 신중하게 설정하는 것이 좋다.

 

프로토콜, 도메인, 포트번호가 같아야 같은 출처라고 판단.

 

 

2. CSRF 공격

CSRF (Cross Site Request Forgery) attack의 약자

공격자의 요청이 사용자의 요청인 것처럼 속이는 공격 방식 

 

사용자가 인증한 세션 -> 웹 애플리케이션이 정상적인 요청과 비정상적인 요청을 구분하지 못한다는 점을 악용하는 공격 방식

 

이메일이나 웹사이트에, 악용하기 위한 요청이 삽입된 하이퍼링크를 심어놓고, 

사용자가 이를 클릭하게 되면 이미 인증된 세션이기에 정상적인 요청이라고 판단,

실체 요청이 수행되는 결과를 일으키는 것.

 

즉, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격.

 

 

https://nordvpn.com/ko/blog/csrf/

 

크로스 사이트 요청 위조(CSRF)의 의미

크로스 사이트 요청 위조란 무엇일까요? 이 글에서 크로스 사이트 요청 위조의 의미와 방지 방법을 확인해 보세요

nordvpn.com

-> 해당 사이트의 CSRF의 예시가 이해하기가 좋다.

 

https://devscb.tistory.com/123

 

CSRF란, CSRF 동작원리, CSRF 방어방법

CSRF란, CSRF 동작원리, CSRF 방어방법 CSRF란 CSRF란, Cross Site Request Forgery의 약자로, 한글 뜻으로는 사이트간 요청 위조를 뜻합니다. CSRF는 웹 보안 취약점의 일종이며, 사용자가 자신의 의지와는 무관

devscb.tistory.com

 

해결책 :

CSRF 토큰

세션 쿠키에 노출되지 않도록 HTML 폼에 숨겨진 매개변수 내에 삽입.

 

Referer check (리퍼러 체크)
HTTP 요청 헤더 정보에서 referrer 정보를 확인 가능. 

보통 host와 refer 값이 일치

 

 

 

https://jaykaybaek.tistory.com/29

 

[Spring Security] CORS, CSRF란?

CORS란? CORS란 “Cross-Origin Resource Sharing”의 약자입니다. CORS는 프로토콜인데, 서로 다른 origin일 시 리소스와 상호 작용하기 위해 클라이언트인 브라우저에서 실행되는 스크립트입니다. 예를 들어

jaykaybaek.tistory.com

 

728x90

'코딩 이야기' 카테고리의 다른 글

MySQL과 MongoDB의 차이점은?  (0) 2024.06.17
Base64 인코딩이란  (0) 2024.06.11
Docker vs. Virtual Machine  (0) 2024.05.31
프레임워크와 라이브러리의 차이점  (0) 2024.05.27
spring과 springBoot의 차이점  (0) 2024.05.24