인터넷 사용이 증가함에 따라 웹 보안은 나날이 중요해지고 있다.
그 중에서도 XSS와 CSRF는 웹 개발자와 사용자 모두 주의해야 할 중요한 문제이다.
이 둘에 대해서 자세히 알아보고자 한다.
XSS 란
공격 목적
XSS는 "Cross-Site Scripting"의 약자이며,
악의적인 스크립트를 웹 페이지에 삽입하여 사용자 브라우저에서 실행시켜 공격하는 것이다.
이로써 공격자는 다른 사용자의 세션 쿠키나 민감한 정보를 탈취 또는 조작할 수 있다.
공격 대상
주로 사용자의 브라우저와 해당 웹 페이지를 공격한다.
공격 방식
악의적인 스크립트가 웹 페이지에 삽입되어 사용자의 브라우저에서 실행된다.
XSS 공격자는 사용자의 브라우저에서 실행되는 스크립트를 통해 사용자의 쿠키, 세션 정보 등을 탈취한다.
이를 통해 사용자의 계정을 불법적으로 사용하거나 민감한 정보를 탈취 할 수 있다.
공격자는 웹 페이지에 악의적인 내용을 삽입하여 웹 페이지의 내용을 변조하거나 공격자가 원하는 내용을 표시할 수 있다.
방어 및 예방
XSS는 주로 1. 확인되지 않은 경로를 통해 데이터가 입력되거나
2. 동적인 데이터의 유효성 검사가 적절히 이루어지지 않고 사용자에게 보내지는 경우에 발생한다.
입력 값 제한
유저 입력값이 한정적인 범주안에서 예측 가능하다면, 드롭다운 등을 사용하여 미리 입력될 데이터값을 통제할 수 있다.
입력 값 치환
XSS 공격은 기본적으로 <script> 태그를 사용하기 때문에 XSS 공격을 차단하기 위해
태그 문자(<, >) 등 위험한 문자 입력 시 문자 참조(HTML entity)로 필터링하고,
서버에서 브라우저로 전송 시 문자를 인코딩하는 것이다.
HTML 문자 참조란 ASCII 문자를 동일한 의미의 HTML 문자로 변경하는 과정이다.
예를 들어, 문자 “<”는 동일한 의미의 HTML “<” 로 변경한다.
HTML 엔터티는 대부분의 인터프리터(특히, 브라우저)에서 특수한 의미를 가지지 않으며, 단순한 문자로 처리된다.
이렇게 인코딩하면 사용자는 <script>가 <script>로 보이지만
HTML 문서에서는 <script> 로 나타나서 브라우저에서 일반 문자로 인식하고
스크립트로 해석되어 실행되지는 않는다.
스크립트 영역에서 출력 자제
이벤트 핸들러 영역에 스크립트가 삽입되는 경우 보호기법들을 우회할 수 있기 때문에
사용자의 입력을 출력하는 것을 최대한 자제해야 하며 필요한 경우 대응 방안과 함께 사용해야 한다.
CSRF 란
공격 목적
CSRF는 "Cross-Site Request Forgery" 의 약자이며,
특정 웹 애플리케이션에서 사용자의 인증된 세션을 이용하여 서버에 악의적인 요청을 보내는 공격이다.
피해자가 로그인한 상태에서 공격자가 조작한 웹 페이지나 이메일 링크를 클릭하게 만들어 공격을 한다.
공격 대상
주로 특정 웹 애플리케이션의 서버를 공격한다.
특정 웹 애플리케이션에서 인증된 사용자로서 악의적인 요청을 보내려는 것이 목표이다.
공격 방식
피해자가 웹 애플리케이션 A에 로그인한 상태이다.
CSRF 공격자는 피해자의 인증된 세션을 이용하여 서버에 특정 상태 변경 요청을 보낸다.
이런 요청은 피해자의 동의 없이 서버에서 처리횐다.
예를들어, 피해자가 인터넷 뱅킹 웹 애플리케이션에 로그인한 상태에서
공격자가 조작한 이메일을 피해자가 클릭하면, 공격자가 은행 계좌 이체를 위한 요청을 피해자의 계정으로 전송할 수 있다.
방어 및 예방
일반적으로 CSRF 공격 방어는 GET 메소드와 같은 조회성 요청은 제외하고, 데이터 조작이 가능한 POST, PATCH, DELETE 메소드에 적용한다.
CRSF 토큰 사용
서버측에서 CSRF 공격을 보호하기 위한 문자열을 유저의 브라우저와 웹 앱에만 제공한다.
이 조합으로 생성된 요청에만 성공적으로 응답을 해주는 방식이다.
Same-Site Cookie 사용
같은 도메인에서만 세션, 쿠키를 사용할 수 있도록 만든다.
같은 도메인에서 온 요청이 아니면 받아주지 않는다.
Referer 검증
Request Header에 포함된 Referer는 현재 요청된 페이지의 링크 이전의 웹 페이지 주소를 포함한다.
요청을 받는 서버는 CSRF를 막기위해 정해준 Referer만 허용해주는 유효성 검사 로직을 추가하는 조치를 취한다.
'CS공부' 카테고리의 다른 글
[SQL] mariaDB 기본 문법 (create, insert, update, delete, drop, db생성) (0) | 2023.09.08 |
---|---|
CORS (Cross-Origin Resource Sharing) 란? (0) | 2023.08.30 |
로드밸런싱 (Load Balancing) 이란 (0) | 2023.08.22 |
서블릿(Servlet)이란? (0) | 2023.08.21 |
WS(Web Server)와 WAS(Web Application Server) 차이 (0) | 2023.08.18 |