크로스 도메인 (Cross Domain) - 서로 다른 도메인간 호출로 주로 AJAX를 활용해 타 사이트의 데이터를 크롤링해올때 데이터의 도용 및 각종 보안문제를 야기하는데 이를 막기위해 Cross-Origin HTTP요청을 제한하는 것이다
동일출처정책 (SOP, Same Origin Policy)
- 상단의 크로스 도메인으로 인하여 코드 탈취 및 악용의 여지를 없애기 위해 만들어진 정책으로 동일한 출처의 접속만 리소스에 접근하도록 제한하는것
- SOP가 적용되지 않을경우 사용자는 A사이트에 로그인후 인증토큰을 받고 이것이 유효한 상태로 B사이트에 방문할경우 B 사이트의 스크립트는 사용자 브라우저를 통해 A 사이트인증토큰에 접근이 가능하게된다. A사이트의 토큰을 B사이트에서 악용할수 있다는 점이다.
- http://example.com:80과 http://example.com:8080 는 포트번호가 다른데 SOP에 따라 서로 다른 출처로 간주된다
- AJAX를 통한 크롤링이 늘어나면서 SOP를 따질경우 제약이 너무 많아지기에 CORS정책이 나오게 되었다.
- 개발자도구 - network 탭에서 Access-Control-Allow-Origin란 헤더가 없을경우 다음과 같은 에러가 나타나게된다.
//크로스도메인 에러
XMLHttpRequest cannot load http://www.abc.co.kr.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://cvb.abc.co.kr' is therefore not allowed access.
프로토콜 - 연결,통신 데이터 전송을 제어하는 일련의 규칙 및 표준 (http, https...)
스킴 (Scheme)- URL체계 최상위 레벨로 특정 프로토콜의 이름
- http: 일반적인 웹 페이지에 접근하기 위한 HTTP 프로토콜.
- https: 보안 웹 페이지에 접근하기 위한 HTTP Secure 프로토콜.
- ftp: 파일 전송 프로토콜(FTP)을 사용하여 파일을 전송하거나 다운로드할 때 사용.
- mailto: 이메일 주소를 지정하고 이메일 클라이언트를 열 때 사용.
크로스 도메인 이슈 (CORS, Cross Origin Resource Sharing)
- HTTP헤더 기반 매커니즘으로 동일 출처 이외의 다른출처도 접근할수 있도록 하는 기능 -> 다른 사이트의 코드를 허가없이 도용하는걸 방지하기 위함
- 만일 CORS정책을 지키지 않은상태로 다른 출처가 리소스의 로드를 요청할경우 SOP에 의해 거부, 리소스가 차단
- 서버가 실제 요청을 허용하는지 확인을 위해 브라우저가 원본간 리소스를 호스팅하는 서버에 "실행전" 요청 매커니즘에 의존한다.
- 브라우저에서 두번쨰 요청 도메인이 처음 요청을 받고 응답한 사이트의 도메인에 포함된 URL이 아닐경우 에러
- Simple request, Pre-flighted request 2종류로 나뉜다.
Simple request (간단한 요청)
pre-flighted 없이 GET,HAED,POST중 1가지 방식이며 POST는 content-type이 하단과 같은경우에만 허용된다.
- application/x-www-form-unlencoded,
- multipart/form-data
- text/plain
- 클라이언트가 요청을 보낼경우 브라우저는 CORS에 대한 헤더를 추가하여 서버에 전달 -> 서버가 헤더 확인후 Origin(출처)값이 허용된다면 요청 헤더의 Access-Control-Allow-Origin를 Origin 값으로 설정한뒤 브라우저에 보낸다 -> 브라우저는 Access-Control-Allow-Origin가 탭의 출처와 일치하는지 확인한다 (와일드카드도 적용된다)
Preflighted Request (사전 요청)
복잡한 요청을 보내기전 브라우저가 OPTIONS 메서드를 사용하여 서버가 해당 요청을 수용할 수 있는지 확인하는 것입니다.
- 요청을 보낸다 -> 서버는 Access-Control-Allow-Origing헤더를 참고하여 SOP를 검증 -> 브라우저는 CORS 요청을 보낸다 -> 해당 요청이 허용된경우 실제 요청 처리
- JSON방식으로 데이터를 가져올떈 SOP에 영향을 받지만 JS, CSS파일은 SOP에 영향을 받지 않으므로 JS파일 내부에서 JSON형식으로 파싱해 사용가능
- 클라이언트는 브라우저 실행옵션, 플러그인을 활용해 CORS 회피(무시) -> 브라우저가 진행하는것이기에 문제없다
사이트간 스크립팅 (XSS, Cross-site scripting)
웹사이트의 관리자 이외의 사람이 웹페이지에 악성 스크립트를 삽입할수 있는 취약점으로 주로 게시판에 악성스크립트가 담긴 글을 올리는 형태이다. (웹페이지 일부를 다른 사이트로 링크 및 악성코드를 심어 피싱사이트로 유도)
비지속적 XSS (Non-persistent) - 클라이언트가 제공하는 HTTP쿼리 매개변수에 적절치 않은 결과를 페이지에 출력하는것 (반사형 XSS라고도 한다.)
- 검증되지 않은 사용자가 URL파라미터, HTTP요청 헤더정보를 수정해 공격하는것으로 주로 사용되는건 검색엔진의 검색창이다
- 검색엔진의 검색창에서 문자열을 검색하는경우 이것은 결과페이지(url)에 나타나게 되는데
- 주로 피해자에게 입력받은 검색어를 표시하는곳, 입력한 값을 오류메세지와 같이 보여주는곳에 스크립트를 삽입하며 이때 입력값을 포함해 응답을 전송할때 실행한다. (피해자가 직접 스크립트를 실행하도록 유도하기에 1회성 공격이라 할수있다)
지속적 XSS (persistent XXS) - 공격자(A)가 기존 페이지에 악성코드를 삽입, 서버의 DB에 저장되는데 이것이 다른 사용자(B,C,D,..)에게 정상적인 페이지처럼 계속 출력되는것
- 악성 스크립트 삽입 -> 서버에 저장 -> 다른 사용자에게 전달 -> 실행 및 영향
- 다른 사용자는 이것이 출처가 분명한 사이트에서 받아왔기에 문제가 없다고 생각하지만 실질적으론 (A)의 악성코드도 같이 가져오는 것이며 쿠키를 탈취당하거나 타 사이트로 리다이렉션되는 방식이다.
'CS' 카테고리의 다른 글
코딩 용어모음 (0) | 2024.08.23 |
---|---|
JS파일 가져오기 로컬, 원격 차이 (0) | 2024.08.03 |
IP, DNS, HTTP (0) | 2023.07.09 |
HTTP 헤더 (0) | 2023.05.06 |
난독화 (0) | 2023.05.03 |