CS

[CS]CSRF & XSS & CORS에 대해

땅지원 2023. 1. 29. 15:30

스프링 시큐리티에 대해 공부하던 중 CSRF & XSS에 대한 개념이 많이 언급되서 정리를 해보려고 한다

 

사실 여러번 들어보고 개념정도는 말할 수 있지만 좀 더 자세히 공부를 해보는게 좋을 것 같다

 

CSRF(Cross-Site Request Forgery), 사이트 간 요청 위조

말 그대로 사용자가 자신의 의지와는 무관하게 사이트 간의 통신이 일어나는 중에 요청(Request)를 위조해서 공격한다는 의미

대표적으로 2008년에 옥션에서 CSRF로 인한 해킹사건이 일어났었다

옥션 관리자 중 한명이 관리 권한을 가지고 있는 상태에서 회사 내에서 작업하던 중 메일이 날라왔는데 그 메일을 열어볼 때 해킹을 하여 시원하게 털린 기록이 있음

** 여기어때는 2017년에 SQL Injection으로 털림

 

대처방법

  • Security Token(CSRF Token)  -> Spring Security에선 csrf() 설정을 해서 CSRF 토큰을 발급하여 클라이언트로부터 요청을 받을때마다 토큰을 검증한다
  • Referrer(요청 전송 페이지) 검증 -> referrer는 링크를 통해서 각각의 사이트로 방문시 남는 흔적이라고 이해하면 되는데 이메일 같은걸로 특정 URL로 방문 했다는건 정상적인 접근이 아니니까 이런식으로도 대처 가능

 

XSS(Cross-Site-Script(Scripting)), 크로스 사이트 스크립팅

공격자가 상대방의 브라우저에 스크립트가 실행되도록 해 사용자의 세션을 가로채거나, 웹사이트를 변조하거나, 악의적 콘텐츠를 삽입하거나, 피싱 공격을 진행하는 것을 말한다

 

대처방법

  • 입출력값 검증, 보안 라이브러리 사용

 

CORS(Cross-Origin Resource Sharing), 교차 출처 리소스 공유

웹 개발자라면 진짜 무조껀 만나봤을 cors 정책

cors 관련 이슈를 만났을 때는 우리가 cors라는 정책을 위반했기 때문에 나오는 현상인데 사실 cors라는 정책이 있어서 우리가 안전하게 Resource를 받아올 수 있었던 것이다교차 출저 리소스 공유에 대해 좀 쉽게 말하면, 다른 출처에 대한 리소스(자원)에 대한 걸 허가 해줄꺼냐 말꺼냐라는 의미

 

여기서 SOP(Same Origin Policy) 라는 정책과 비교가 되는데 다른 Origin으로 요청을 보낼 수 없도록 금지하는 브라우저의 기본적인 보안 정책이다.

즉, 동일한 Origin으로만 요청을 보낼 수 있게 하는 것이다

 

하지만 SOP으로 하기엔 너무나도 제약이 많고 서로 다른 Origin들끼리 통신을 해야하는일이 너무나도 많아졌기 때문에 새로운 정책이 필요했는데 다른 Origin으로도 요청을 보낼 수 있는 새로운 정책으로  CORS가 나온 것이다원래대로라면 SOP에 의해 막히게 될 요청을 풀어주는 정책이라고 보면됨

 

만약 이런 정책이 없다면? CSRF공격이 진짜 자유롭게 이루어지겠지?

 

 

** 여기서 Origin은 프로토콜, 도메인, 포트번호을 합친 의미

https://ddangjiwon:8080/posts/123456?data=1234

# Origin
https://ddangjiwon:8080

 

서버에서 cors 설정을 하거나, 프록시 서버 사용하면 해결

 

[SpringBoot] CORS 설정

CORS(Cross Origin Resource Sharing) Origin 이 다른 경우에 자원을 주고 받을 수 있도록 하는 http 통신 프로토콜 요청하는 클라이언트와 응답해야하는 서버의 Origin 이 다른 경우 CSRF(Cross-Site Request Forgery)나

ddangjiwon.tistory.com