iframe 샌드박스 및 권한 정책
sandbox와 Permissions-Policy로 삽입된 콘텐츠 제한하기
iframe 샌드박스 및 권한 정책은(는) CoddyKit의 무료 HTML Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 HTML Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. HTML Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
샌드박스 iframe을 사용하는 이유
iframe에 포함된 신뢰할 수 없는 콘텐츠(제3자 위젯, 사용자가 제출한 HTML 미리 보기, 삽입된 게임)는 브라우저의 모든 기능을 사용해서는 안 됩니다. sandbox 속성은 iframe이 수행할 수 있는 작업을 제한하므로, 악성 콘텐츠로 밝혀지더라도 피해를 줄일 수 있습니다.
빈 sandbox = 최대 제한
<iframe sandbox src="...">처럼 값을 지정하지 않으면 모든 제한이 적용됩니다. 즉, 스크립트, 폼, 팝업, 최상위 탐색, 플러그인을 사용할 수 없고 고유 출처로 취급됩니다. 이를 시작점으로 삼고, 삽입된 콘텐츠에 필요한 기능만 추가하십시오.
기능 추가
샌드박스 토큰을 사용하면 특정 기능을 다시 활성화할 수 있습니다. sandbox="allow-scripts allow-same-origin"은 스크립트 실행과 동일 출처 접근을 허용합니다. 각 토큰은 하나의 제한을 완화하므로, iframe에 실제로 필요한 최소한의 집합만 조합하십시오.
<iframe sandbox="allow-scripts allow-same-origin" src="https://embed.example.com/widget"></iframe>일반적인 토큰
allow-scripts는 JS를 활성화합니다. allow-forms는 폼 제출을 활성화합니다. allow-popups는 window.open을 활성화합니다. allow-same-origin은 iframe을 고유 출처로 취급하지 않도록 하며, localStorage에 필요합니다. allow-top-navigation은 부모 창 탐색을 허용합니다.
위험한 조합
직접 호스팅하는 iframe에 allow-scripts와 allow-same-origin을 함께 적용하면 iframe이 자체 샌드박스를 제거하는 기능을 포함하여 출처에 대한 완전한 접근 권한을 갖게 됩니다. 신뢰할 수 있는 콘텐츠에만 함께 적용하고, 신뢰할 수 없는 콘텐츠에서는 allow-same-origin을 제외하십시오.
권한 정책
권한 정책(이전 명칭은 기능 정책)은 페이지와 해당 iframe이 사용할 수 있는 브라우저 API(카메라, 마이크, 위치 정보, 전체 화면, 자동 재생)를 제어합니다. 부모 페이지에 설정하십시오. Permissions-Policy: geolocation=()은 모든 곳에서 위치 정보 사용을 차단합니다.
iframe별 권한 부여
iframe의 allow 속성은 해당 iframe에 대한 부모 페이지의 정책을 재정의합니다. <iframe allow="camera; microphone">을 사용하면 부모 페이지의 기본 정책이 이를 거부하더라도 iframe에서 해당 API를 사용할 수 있습니다.
<iframe
src="https://video-call.example.com"
allow="camera; microphone; fullscreen"
sandbox="allow-scripts allow-same-origin">
</iframe>권한 목록 작성
사양에 포함되는 권한 목록은 계속 바뀝니다. 카메라, 마이크, 위치 정보, 가속도계, 자이로스코프, 자기계, 결제, USB, MIDI, 전체 화면, 자동 재생, 화면 속 화면 등 수십 가지가 있습니다. 목록을 점검하고 페이지에 필요하지 않은 기능은 모두 명시적으로 거부하십시오.
정책 위반 보고
권한 정책은 CSP의 report-uri와 같은 방식으로 구성된 엔드포인트에 위반 사항을 보고합니다. 마이그레이션 중에 이를 사용하십시오. 엄격한 정책을 활성화하고 무엇이 중단되는지 확인한 다음, 필요한 기능에 한해 신중하게 완화하십시오.
출처 격리
민감한 페이지에는 Cross-Origin-Opener-Policy: same-origin과 Cross-Origin-Embedder-Policy: require-corp를 설정하십시오. 이렇게 하면 페이지가 다른 출처의 창과 격리되어 Spectre와 같은 타이밍 공격으로부터 보호되고 SharedArrayBuffer를 사용할 수 있습니다.
다층 방어
샌드박스, 권한 정책, CSP, COOP/COEP를 함께 계층화하십시오. 각각 서로 다른 공격 유형을 방어합니다. 제3자 콘텐츠를 삽입하는 작업은 단일 완화책만으로는 충분하지 않을 만큼 위험하므로, 하나가 우회되어도 다른 방어책이 이를 차단하도록 조합하십시오.
테스트
Chrome DevTools의 네트워크 패널과 문제 패널을 사용하여 샌드박스 및 권한 위반을 확인하십시오. 많은 위반은 조용히 처리됩니다(API가 단순히 undefined를 반환하거나 프라미스를 거부합니다). 명시적인 보고 엔드포인트를 사용하면 운영 환경에서 이러한 문제를 발견하는 데 도움이 됩니다.
이해도 확인
자체 출처에서 호스팅하는 iframe에 sandbox="allow-scripts allow-same-origin" 조합을 적용하는 것이 잠재적으로 위험한 이유는 무엇입니까?
요약
iframe에는 기본적으로 샌드박스를 적용하고 콘텐츠에 필요한 토큰만 추가하십시오. 신뢰할 수 없는 콘텐츠에는 allow-scripts+allow-same-origin을 함께 사용하지 마십시오. 권한 정책으로 사이트 전체에서 강력한 API를 거부하고, iframe의 allow 속성으로 예외를 허용하십시오. 다층 방어를 위해 CSP 및 COOP/COEP와 함께 사용하십시오.
자주 묻는 질문
“iframe 샌드박스 및 권한 정책” 강의는 무료인가요?
네 — “iframe 샌드박스 및 권한 정책” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 HTML Academy 강의 전체를 잠금 해제할 수 있습니다. HTML Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“iframe 샌드박스 및 권한 정책”에서 뭘 배우나요?
sandbox와 Permissions-Policy로 삽입된 콘텐츠 제한하기 브라우저에서 직접 실행하는 실습 코드로 HTML Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
HTML Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 HTML Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“iframe 샌드박스 및 권한 정책” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 HTML Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 HTML Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 콘텐츠 보안 정책 meta http-equiv
- innerHTML을 통한 XSS와 방지 방법
- iframe 샌드박스 및 권한 정책
- HTTPS 및 하위 리소스 무결성