웹페이지는 다양한 API와 요소로 홈페이지를 구성한다. 하지만 API 호출의 취약성이 있어 이를 제한하고자 SOP가 생겼고 홈페이지 구성이 극도로 제한되어 일부 API에 대해서 SOP 예외를 허용해준다.
API의 호출 방식은 크게 두가지가 있다 (FORM, AJAX)
HTML<form> 태그를 이용해 데이터를 서버로 전송하기 위한 기본적인 방식
동작방식
1). 사용자가 폼에 데이터를 입력하고 버튼을 클릭하면, 브라우저는 서버에 HTTP 요청(GET,POST)를 보낸다.
2). 서버는 요청을 처리하고 응답을 보낸다.
3). 응답 결과는 전체 웹 페이지를 새로고침하거나, 리다이렉션을 통해 표시된다.
특징
AJAX는 JavaScript를 사용해 서버와 비동기적으로 통신하는 기술입니다. 페이지를 새로고침하지 않고 데이터를 주고받음.
동작 방식:
1). 클라이언트에서 JavaScript를 이용해 서버에 HTTP 요청을 보냄.
2). 서버는 요청을 처리하고 JSON, XML, HTML 등의 데이터를 응답으로 보냄
3). JavaScript는 응답 데이터를 처리하여 페이지 일부를 업데이트
특징:
XSS는 공격자가 악성 스크립트를 신뢰할 수 있는 웹사이트에 삽입하여, 사용자 브라우저에서 실행되도록 만드는 보안 취약점입니다.
XSS 동작 과정
1). 공격자가 웹사이트의 입력 폼이나 URL 매개변수를 통해 악성 스크립트를 삽입.
<script>
alert("You are hacked");
</script>
2). 사용자가 해당 웹사이트를 방문하거나 악성 링크를 클릭.
3). 브라우저는 공격자가 삽입한 스크립트를 실행.
4). 악성 스크립트는 사용자 데이터를 탈취하거나, 다른 악의적인 동작을 수행.
XSS의 유형
1). Stored XSS: 악성 스크립트가 서버에 저장되어, 다수의 사용자에게 영향을 미침.
예: 댓글란에 악성 스크립트 삽입.
2). Reflected XSS: 악성 스크립트가 URL 등의 입력값에 포함되어, 특정 사용자에게만 영향을 미침.
예: 피싱 링크 클릭.
3). DOM-based XSS: 브라우저의 DOM 조작을 통해 발생. 서버와 상관없이 클라이언트 측 코드만으로 작동.
XSS로 인한 피해: 세션 쿠키 탈취, 악성 코드 실행, DOM 조작을 통한 사용자 UI 변조, 키 입력 감시 등
CSRF는 사용자가 신뢰하는 웹사이트에 대한 요청을 공격자가 조작하여, 의도하지 않은 동작을 수행하게 만드는 공격입니다.
CSRF 동작 과정
1). 사용자가 신뢰하는 웹사이트에 로그인하여 세션 인증 정보를 유지.
2). 공격자가 악성 링크를 생성하거나 페이지에 FORM 요청을 삽입.
3). 사용자가 링크를 클릭하거나 페이지를 방문하면, 브라우저는 자동으로 세션 쿠키를 포함하여 요청을 전송.
4). 서버는 요청이 사용자로부터 온 것으로 판단하여 처리.
CSRF로 인한 피해: 금전 거래 요청(예: 송금), 비밀번호 변경, 민감한 데이터 삭제/변경
FORM 요청을 허용하면서 생길 수 있는 CSRF(Cross-Site Request Forgery) 문제는 CSRF 토큰과 같은 추가적인 보안 조치를 통해 보완합니다.
1. 브라우저의 자동 인증 기능
2. FORM 요청의 특성
Cookie를 제약을 거는 방법도 있지만 가장 좋은것은 Anti CSRF Token이다.
Anti-CSRF Token(CSRF 방지 토큰)은 CSRF 공격을 방지하기 위해 사용되는 보안 메커니즘, 주요 개념은 요청이 합법적인 사용자로부터 발생했는지 확인하는 것, 서버와 클라이언트 간의 신뢰를 검증하는 역할을 수행 (보안 OPT와 비슷)
1. 기본 개념
Anti-CSRF Token은 사용자의 요청마다 고유하게 생성되는 토큰.
이 토큰은 서버에서 생성하고 클라이언트에게 전달된 뒤, 요청 시 클라이언트에서 다시 서버로 전송되어 요청의 정당성을 확인.
2. 동작 흐름
1) 토큰 생성:
2) 토큰 전달:
클라이언트는 요청을 보낼 때 이 토큰을 함께 서버로 전송.
<input type="hidden">).3) 토큰 검증: