스프링 시큐리티에 대해 공부하던 중 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 설정을 하거나, 프록시 서버 사용하면 해결
'CS' 카테고리의 다른 글
[CS] UI & UX에 대해 (0) | 2023.01.29 |
---|---|
[CS] 웹에서 일어나는 Push, Pull, Polling, WebSocket에 대해 (0) | 2023.01.29 |
[CS] HashTable & Set & Map에 대해 (0) | 2023.01.21 |
Git Flow 전략에 대해 (0) | 2023.01.10 |
[CS]가상 메모리, 페이징과 세그멘테이션에 대해 (0) | 2023.01.07 |