미소를뿌리는감자의 코딩
CORS & CSRF Problem 본문
https://spring.io/guides/gs/messaging-stomp-websocket
이를 참조하여 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의 예시가 이해하기가 좋다.
https://devscb.tistory.com/123
해결책 :
CSRF 토큰
세션 쿠키에 노출되지 않도록 HTML 폼에 숨겨진 매개변수 내에 삽입.
Referer check (리퍼러 체크)
HTTP 요청 헤더 정보에서 referrer 정보를 확인 가능.
보통 host와 refer 값이 일치
https://jaykaybaek.tistory.com/29
'코딩 이야기' 카테고리의 다른 글
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 |