보안 컨텍스트

  1. Firefox 보안 지침
  2. Referer 헤더: 개인 정보 보호 및 보안 문제
  3. 공격 유형
    1. 클릭재킹 (Clickjacking)
  4. 동일 출처 정책
  5. 무인증 IFrame Experimental
  6. 보안 컨텍스트
    1. 보안 컨텍스트로 제한된 기능들
  7. 사용자 활성화로 제어되는 기능
  8. 사이트 보안
    1. 양식 자동 완성을 끄는 방법
  9. 안전하지 않은 비밀번호
  10. 약한 서명 알고리즘
  11. 인증서 투명성
  12. 전송 계층 보안
  13. 하위 도메인 탈취
  14. 하위 리소스 무결성
  15. 혼합 콘텐츠

보안 컨텍스트는 특정한 최소 인증 및 기밀성 표준이 충족되는 Window 또는 Worker입니다. 많은 웹 API와 기능들은 보안 컨텍스트에서만 액세스할 수 있습니다. 보안 컨텍스트의 주요 목표는 MITM 공격자가 공격의 피해자를 추가로 손상시킬 수 있는 강력한 API에 접근하지 못하도록 방지하는 것입니다.

왜 일부 기능을 제한해야하나요?

웹의 일부 API는 매우 강력하여 공격자가 다음과 같은 작업을 수행할 수 있습니다.

  • 사용자의 프라이버시 침해
  • 사용자 컴퓨터에 대한 저수준 엑세스 권한을 얻음
  • 사용자 자격 증명과 같은 데이터에 대한 액세스 권한을 얻음

컨텍스트는 언제 안전한가요?

컨텍스트는 보안 컨텍스트 명세서에 정의된 특정한 최소 인증 및 기밀성 표준을 충족할 때 안전하다고 간주됩니다. 특정 문서는 보안 컨텍스트인 최상위 브라우징 컨텍스트(창 또는 탭)의 활성 문서일 때 보안 컨텍스트에 있는 것으로 간주됩니다.

예를 들어 <iframe> 내에서 TLS를 통해 전달된 문서의 경우에도 TLS를 통해 전달되지 않은 상위 항목이 있는 경우 해당 컨텍스트는 안전한 것으로 간주되지 않습니다.

그러나 비(非)보안 컨텍스트로 인해 새 창이 생성되는 경우(noopener를 지정하거나 지정하지 않고), 오프너가 안전하지 않다는 사실은 새 창이 안전한 것으로 간주되는것에 영향을 미치지 않는다는 점에 유의해야 합니다. 특정 문서가 보안 컨텍스트에 있는지 여부를 결정하는 것은 비보안 컨텍스트가 문서를 만들었는지가 아니라 연결된 최상위 브라우징 컨텍스트 내에서만 고려하기 때문입니다.

http://127.0.0.1 URL, http://localhosthttp://*.localhost URL(예: http://dev.whatever.localhost/) 그리고 file://과 같은 로컬에서 제공된 리소스도 안전하게 전달된 것으로 간주됩니다.

참고 : Firefox 84 이상에서는 http://localhosthttp://*.localhost URL을 신뢰할 수 있는 원본으로 지원합니다(localhost가 로컬/루프백 주소로 매핑되는 것이 보장되지 않았기 때문에 이전 버전에서는 지원하지 않음).

로컬이 아닌 리소스가 안전한 것으로 간주되려면 다음 기준을 충족해야 합니다.

  • https:// 또는 wss:// URL을 통해 제공되어야 한다.
  • 리소스를 전달하는 데 사용되는 네트워크 채널의 보안 속성이 더 이상 사용되지 않는(deprecated) 것이 아니어야 한다.

기능 감지

페이지는 전역 스코프에 있는 isSecureContext 불리언 값을 사용하여 보안 컨텍스트에 있는지 여부를 확인하기 위해 기능 감지를 사용할 수 있습니다.

js
if (window.isSecureContext) {
  // 페이지는 보안 컨텍스트이므로 이제 서비스 워커를 사용할 수 있습니다.
  navigator.serviceWorker.register("/offline-worker.js").then(() => {
    // …
  });
}

명세서

Specification
Secure Contexts

같이 보기