반응형
Security Policy (SOP, CORS, CSP)
Origin = Protocol, Scheme + Host + Port
Same-Origin Policy (SOP)
- 다른 기원에서 온 자원을 제한하는 정책
- Javascript, Documents, Media 등을 하나의 Origin에서 다른 Origin으로 통신을 하지 못하게 막는 정책
- CSRF같은 요청이 난무하지 않도록 하기 위해서 존재
- 브라우저에서 동작하는 한 프로그램은 자기 자신과 같은 Origin으로 부터만 리소스에 접근 할 수 있는 것
Same-Origin이란?
- 같은 프로토콜, 호스트, 포트를 사용하는 Origin
- SOP 때문에 리소스를 공유하는 것이 불가능 해 보이지만, 기원이 갖지 않더라도 자원을 공유하는 모습을 웹에서 자주 볼 수 있음
- 그 이유는 Cross Origin Resourse Sharing(CORS)라는 SOP로 인한 자원 공유가 안되는 것에 예외를 두는 기능 때문
Cross-Origin Resource Sharing (CORS)
- CORS는 SOP로 인한 제약을 완화해주는 역할
- 다른 Origin임에도 리소스 공유 가능
- Non Simple Request : GET, HEAD, POST Method가 아닌 요청과 1.에서 이외의 Content-Type으로 요청이 들어왔을 경우
- GET, HEAD, POST같은 Method와 Content-Type헤더의 값이 text/plain, application/x-www-form-urlencoded 또는 multipart/form-data일 경우
Simple Request CORS
- Simple Request를 보낼 때는 아래와 같이 Origin이 Header에 자동으로 추가 및 전송됨
- Server는 요청이 들어온 Origin과 Access-Control-Allow-Origin 헤더에서 허용하고 있는 Origin과 일치하는지 판별, 다르다면 즉시 연결을 종료
- 참고 : Access-Control-Allow-Origin은 하나의 Origin만 정의할 수 있고, 여러 개일 경우 * 와일드카드를 사용
Non Simple Request CORS
- Simple Request가 아닌 것들은 전부 Non Simple Request로 분류
- DELETE Method를 보낸다고 가정, GET, HEAD, POST Method가 아니므로 브라우저는 Preflight Requtest라는 것을 사진과 같이 Server에 보냄
- Server는 이 Preflight Request가 허용됐는지 판단하고 응답을 보냄
JSONP
- CORS만 SOP를 완화해 주는 것이 아닌, JSONP(JSON With Padding)이라는 것도 있으나, Read만 할 때 사용할 수 있고, 복잡한 웹 구성에는 부적합
CSP (Content Security Policy)
- 주로 XSS나 Data Injection, Click Jacking 등 웹 페이지에서 악성 스크립트를 삽입하는 공격 기법들을 막기 위해 사용됨
- 주로 헤더에 Content-Security-Policy 내용이 삽입되며 특정 리소스가 어디서 왔는지 검사, 허용된 범위에 포함됐는지 검토
- SOP(Same Origin Policy)와 비슷하나, CSP는 웹 사이트 관리자가 규칙 적용
- 웹 서버는 웹 사이트에서 사용 가능한 CSP 헤더를 브라우저에게 전달, 브라우저는 이를 기반으로 웹 페이지 렌더링
- 인라인 자바스크립트(태그 내에 자바스크립트 명령어 작성) 실행 금지 설정 가능
- 특정 웹사이트(origin)에서만 자원을 불러오도록 설정하여 공격자 서버에 요청을 차단
- 공격자가 웹 사이트에 본래 존재하지 않던 스크립트 삽입 방지
- CSP 보안 정책을 정의한 상태에서 공격자가 다른 소스의 스크립트를 로딩 시 에러 출력
CSP 사용 헤더
- Content-Security-Policy : W3C가 지정한 표준 헤더 - 주로 사용
- X-Content-Secuirty-Policy : FireFox/IE 구형 브라우저에서 사용되는 헤더
- X-WebKit-CSP : 크롬 기반 구형 브라우저에서 사용되는 헤더
CSP 지시문 및 옵션
- default-src : 모든 리소스에 대한 정책
- script-src : Javascript 등 웹에서 실행 가능한 스크립트에 대한 정책
- style-src : css에 대한 정책
- connect-src : script src로 불러올 수 있는 url에 대한 정책
- img-src : 이미지 (data : URL에서 이미지가 로드되는 것을 허용하려면 data: 를 지정)
- script-nonce : script-src에 nonce가 포함되는 정책
- form-action : form 태그 내 action 부분에 대한 정책
- object-src : 플러그인, 오브젝트에 대한 정책
- media-src : video, audio
- front-src : font
- sandbox : HTML 샌드박스
- reflected-xss : X-XSS-Protection header와 동일한 효과
- report-url : 정책 위반 케이스가 나타났을 때 내용을 전달할 URL
- base uri : <base>요소에 나타날 수 있는 URL을 제한
반응형
'웹 공부' 카테고리의 다른 글
Open Redirect (번외로 Docker) (1) | 2023.11.13 |
---|---|
RFI/LFI (0) | 2023.11.13 |
XSS (0) | 2023.11.13 |
Node.js (0) | 2023.10.17 |
XML Http Request (0) | 2023.10.17 |