원문 캡처 · companyofcraft.com
원문 캡처 · companyofcraft.com

보안 헤더 검사기는 입력한 페이지의 HTTP 응답 헤더와 Content-Security-Policy 설정을 확인한다. 페이지는 검사 버튼을 누를 때 서버에서 가져오며, 검사 대상 주소와 http:// 주소를 각각 한 번씩 요청해 HTTPS로 리디렉션되는지도 살핀다. 검사 대상 링크는 저장하지 않는다.

HTTP 보안 헤더는 브라우저에서 스크립트를 불러올 위치, 다른 사이트의 프레임에 페이지를 넣을 수 있는지, HTTPS를 항상 사용해야 하는지 등을 지정한다. 교차 사이트 스크립팅이나 클릭재킹 같은 공격으로부터 방문자를 보호하는 데 쓰인다.

Content-Security-Policy를 처음 설정할 때는 default-src 'self'; object-src 'none'; base-uri 'none'; frame-ancestors 'none'에서 시작해 페이지가 불러오는 호스트를 추가하는 방법을 안내한다. 우선 Content-Security-Policy-Report-Only로 보내고 브라우저 콘솔에서 차단된 요청을 확인한 다음 Content-Security-Policy로 전환한다.

'unsafe-inline'은 모든 인라인 스크립트를 실행하게 하므로 공격자가 삽입한 스크립트도 실행될 수 있다. 필요한 인라인 스크립트에는 논스(nonce)나 해시를 지정하는 것이 대안이다. script-src에 논스나 해시가 있으면 브라우저는 'unsafe-inline'을 무시한다.

<meta> 태그에 넣은 정책은 대부분 적용되지만, 브라우저는 그 안의 frame-ancestors, report-uri, sandbox를 무시한다. 이 항목들은 응답 헤더로 보내야 한다. 헤더와 <meta> 태그에 정책이 모두 있으면 브라우저는 두 정책을 함께 적용하므로 검사기도 둘 다 읽는다.

검사 항목은 대부분의 사이트에 필요한 헤더를 다루지만, 모든 검사를 통과해도 다른 보안 문제가 남아 있을 수 있다. Company of Craft는 병합 전에 UI 회귀를 포착하는 stateofpixel도 만든다.