웹 공부

SOP, CORS, CSP

insetto:) 2023. 11. 13. 00:34
반응형

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임에도 리소스 공유 가능
    1. 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