- Published on
동일 출처 정책 (Same-Origin Policy)에 대한 이해
- Authors
- Name
- Inhwan Cho
동일 출처 정책(Same-Origin Policy)
은 웹 보안의 핵심 원칙 중 하나입니다.
이 정책은 한 출처에서 로드된 문서나 스크립트가 다른 출처의 자원을 함부로 가져오지 못하도록 제한하는 보안 메커니즘입니다.
여기서 출처(origin)
는 프로토콜(예: http, https)
, 호스트(도메인 예:example.com)
, 포트(예: 3000)
를 모두 포함한 구성요소를 의미합니다.
1. 동일 출처 정책의 목적
동일 출처 정책의 주된 목적은 사용자의 데이터를 보호하는 것입니다.
만약 이 정책이 없다면 악의적인 웹 사이트가 사용자의 세션을 도용하거나, 다른 사이트에 대한 사용자의 행위를 무단으로 조작할 수 있습니다.
이렇게 되면 사용자의 개인정보와 데이터 보안이 크게 위협받을 수 있습니다.
2. 동일 출처 정책의 규칙
동일 출처 정책에 따르면, 웹 페이지에서 실행되는 스크립트는 다음 조건을 만족할 때만 다른 출처의 리소스와 상호작용할 수 있습니다:
- 프로토콜이 동일합니다.
- 호스트(도메인)가 동일합니다.
- 포트 번호가 동일합니다.
예시
예시를 통해 보면 매우 쉽게 이해할 수 있습니다.
출처 예시 1 | 출처 예시 2 | 결과 |
---|---|---|
http://example.com | http://example.com/page1 | 성공 |
http://example.com | https://example.com | 실패 (프로토콜 불일치) |
http://example.com | http://example.org | 실패 (도메인 불일치) |
http://example.com:80 | http://example.com:8080 | 실패 (포트 불일치) |
이 표에서 볼 수 있듯이, 동일 출처 정책은 매우 엄격하여, 웹 애플리케이션의 보안을 강화합니다.
3. 예외 상황 및 해결책
물론, 실제 웹 개발에서는 다른 출처의 리소스를 안전하게 사용해야 할 필요성이 있습니다.
이때 사용할 수 있는 몇 가지 예외 상황 및 해결책이 있습니다.
CORS (Cross-Origin Resource Sharing): 서버에서 특정 출처에 대한 접근을 허용하도록 설정할 수 있습니다.
JSONP (JSON with Padding): 스크립트 태그는 동일 출처 정책의 제약을 받지 않으므로, JSONP를 이용하여 서버로부터 데이터를 받아올 수 있습니다.
표와 예시를 통해 알기 쉽게 설명하겠습니다.
기준 | CORS | JSONP |
---|---|---|
기술 타입 | HTTP 헤더를 사용한 보안 메커니즘 | <script> 태그를 이용한 JavaScript 기법 |
HTTP | 메소드 지원 모든 HTTP 메소드 (GET, POST, PUT 등) 지원 | 오직 GET 메소드만 지원 |
보안 | 안전하게 구성 가능. SOP를 준수하면서 CORS 응답 헤더로 보안 설정 | XSS(Cross-Site Scripting) 취약점을 유발할 수 있음 |
데이터 포맷 | JSON, XML, 텍스트 등 다양한 데이터 포맷 지원 | JSON 데이터만 지원 |
브라우저 지원 | 모든 현대 브라우저에서 지원 | 거의 모든 브라우저에서 지원 |
사용 예시 | 서버: Access-Control-Allow-Origin : *(star) 헤더를 응답에 추가하여 모든 출처에서의 접근을 허용.클라이언트: AJAX 요청 시 특별한 설정이 필요 없음. | 서버: JSON 데이터를 함수 호출로 래핑. 클라이언트: <script> 태그를 통해 원격 JS 파일 요청. |
CORS의 서버에서의 사용 예시
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*'); // 모든 출처에서의 접근 허용
next();
});