1. XSS 란?
이 공격을 한마디로 표현하자면, 스크립트를 사용한 공격이다.
XSS의 목적은 쿠키 및 세션탈취 , 광고 등등 주요 타겟이 클라이언트다.
혹시 이런 경험 해본적 없는가?
사이트 또는 게시글을 눌렀는데 이상한 알림이 우수수 뜨거나, 이상한 사이트가 추가로 뜬다거나...
공격 시뮬레이션을 한번 해보겠다.
1. 나쁜 해커놈이 게시글 작성을 한다.
2. 게시글 제목 또는 내용 에 다음과같은 내용을 작성한다.
1
2
|
// 광고사이트로 이동시키는게 대부분이다.
<scrpit> window.location.href = 'https://falsy.me'; </script>
|
cs |
컴퓨터 팝니다.. or 상담있습니다. 등등 목적에 맞게안쓰고 이런 스크립트로 작성하는것이다.
자 이걸 제목에다 작성하면...
사용자는 게시글 목록페이지만 로딩하면 이상한사이트로 이동해 버린다
Xss는 여러가지 대응방안이 있지만, 그중에 하나로 꺽쇠 치환법이다.
< > 를 코드처리를 못하게 다른 특수문자로 치환하는거다.
2.CSRF
CSRF는 XSS와는 달리 주요 타겟이 서버다.
사용자의 인증된 권한을 사용해 서버 리소스를 조작한다.
CSRF의 공격 시뮬레이션을 해보자.
1.나쁜해커가 게시글에 글을쓴다.
2. 해커가 악성 코드 URL이 담긴 게시글을 작성한다.
EX) 해커의 계정으로 100만포인트를 입력 : {HostURL}/?user=25&amount=1000000
그리고 관리자가 온다.
1. 관리자는 악성코드가 담긴 게시글의 악성 URL을 실수로 연다.
2. 관리자의 계정은 서버의 최고권한을 가지고있기때문에, 해커의 계정에 본인의 의지와는 무관하게
{HostURL}/?user=25&amount=1000000 요청을한다.
-> 본래, 해커는 관리자 권한이없어 리소스 조작을 할 수 없지만, 관리자의 신분으로 조작을 유도시킨다.
CSRF를 요약하자면, 권한이 부여된 관리자 또는 유저를 속여, 서버의 리소스를 공격하는 수법이다.
대안법:
CSRF의 대안이 여러가지가 있지만, 그중에서도 가장 간단한 Spring Security를 사용하는것이다.
올바른 페이지에서 올바른 요청인지를 판단해준다.
잘못된 페이지에서 요청을 하면 SpringSecurity에서 적발하고 에러처리한다.
이 올바른 페이지 여부를 Token으로 확인한다. Token이 없거나 잘못된 토큰이면 에러처리한다.
3. CORS
교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)이다.
CORS는 SOP(Same-Origin Policy)와 연계해서 보면 좋다.
SOP는 같은 출처의 리소스 요청만 받는다라는 정책이다.
SOP의 탄생 이유는 다음과같다.
만약, 서버가 A사이트에 요청을 보냈는데, 응답이 A사이트가아닌 B사이트에서 왔다. -> 이는 SOP위반
SOP는 A사이트에서 요청을하면 A사이트로부터 응답을 받아야한다라는 원칙이다.
헌데, 이 SOP가 프로토콜+HostURI + 포트 까지 완벽하게 일치해야만 통과한다.
-> 프로토콜 + Host는 같은데 포트만 살짝다르다고 통과 안시켜준다..
-> 즉 너무 과한 과보호다!!
하지만, 오늘날 프로젝트는 SOP를 철저하게 지키면서 개발되지않고 다른 웹 어플리케이션과 공유하면서 사용하기에,
CORS라는 새로운 정책을 만들었다.
CORS를 통하여, 다른 출처와 통신할수 있게한다.
단, CORS를 그냥 모든 경로로 열어버리면, CSRF 공격에 위험하다.
-> 뭐 당장 생각해봐도 정체불명 요청을 받는다는것 자체가 위험하다.
즉, CORS 설정을 적절하게사용하여, 신뢰할수있는 사이트에게만 열어버리는것이 바람직하다.
다음과 같이 설정을한다.
CORS설정을 하면, 신뢰할수 있는 사이트는 통과할수 있게 할 수 있으며,
그 외 출처 모르는 응답은 받지 않게 설정이 가능하다.
CORS vs CSRF
한마디로 둘의 차이점을 설명하라면, CORS 는 정책이고 CSRF 는 공격방식이다.
CORS는 [신뢰할수있는 사이트 허용+ CSRF와같은 신뢰X 요청 거부] 를 해주는 포괄적인 정책 및 기술이다.
둘의 시나리오가 비슷해서 필자도 헷갈렸지만 여러 사이트를 조사해본결과 이런 결론에 이르렀다.
'자바 > 스프링(Spring)' 카테고리의 다른 글
Spring Cloud Gateway 간단실습 및 이해 (0) | 2023.03.27 |
---|---|
스프링(Spring) 테스트 환경에서 @PostConstruct 비활성화 (0) | 2022.10.12 |
스프링 시큐리티 + OAuth2.0 (Kakao편) (0) | 2022.09.25 |
스프링시큐리티 + OAuth2.0 사용해보자 (Google편) (1) | 2022.09.24 |
스프링 시큐리티를 사용해보자!! (0) | 2022.09.23 |