초안
이 문서는 작성중입니다.
Content Security Policy을 설정하는 것은 어떤 정책을 실행하게 할 것인지를 결정하는 것을 포함하고 이런 정책 실행 부분을 Content-Security-Policy 헤더를 사용해서 정책을 실행하게 설정하는 것입니다.
Firefox 23이전에 X-Content-Security-Policy 헤더가 사용되었습니다. Firefox 23과 그 이후 버전은 표준인 Content-Security-Policy헤더를 사용합니다. 이전 헤더와 표준 헤더로 전환되는 동안 웹 사이트들은 Content-Security-Policy
와 Content-Security-Policy 양쪽 모두를 전송할 수 있습니다. 이런경우에는
X-Content-Security-Policy 헤더는 무시되고 Content-Security-Policy에 포함되어 있는 정책이 상용되게 됩니다.
Specifying your policy
정책을 지정하기 위해서 Content-Security-Policy
HTTP 헤더를 아래 같이 정책을 지정할 수 있습니다:
Content-Security-Policy: policy
policy라는 문자열은 policy directives 를 포함해서 웹 사이트의 콘텐츠 보안 정책을 설명하게 됩니다.
Writing a policy
A policy is described using a series of policy directives, each of which describes the policy for a certain resource type or policy area. Your policy should include a default-src
policy directive, which is a fallback for any resource type you don't explicitly establish a policy for. A policy needs to include a default-src or script-src directive in order for CSP to restrict inline scripts from running, as well as blocking the use of eval()
. A policy needs to include a default-src or style-src directive in order for CSP to restrict inline styles from being applied from a <style>
element or a .style attribute
The syntax for a policy is a string of semicolon-separated directives, each following the syntax described in Supported policy directives.
Examples: Common use cases
웹 사이트를 위한 보안 정책을 사용하기 위해서 공통적인 시나리오들이 있습니다. 여기서 몇몇 예를 살펴보겠습니다.
Example 1
웹사이트의 관리자가 모든 웹 사이트 내의 콘텐츠는 사이트와 같은 도메인에서 제공하게하려고 한다. 단, 서브도메인은 제외:
Content-Security-Policy: default-src 'self'
Example 2
웹 사이트 관리자가 모든 콘텐츠에 대해 신뢰하는 도메인과 그 서브 도메인에게 허용하려 한다.
Content-Security-Policy: default-src 'self' *.mydomain.com
Example 3
웹 사이트 관리자가 웹 애플리케이션의 사용자가 어느 도메인에서라도 이미지를 웹 콘텐츠에 포함하기를 원하지만 오디오나 비디오는 신뢰하는 도메인만으로 제한하고 모든 스크립트는 신뢰할 수 있는 코드를 호스팅하는 특정 서버만 포함 시키려 한다.
Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com
이것은 기본적으로 콘텐츠는 문서가 있는 원래 호스트에서만 허용된다. 아래와 같은 예외를 포함하고 있다.:
- 이미지들은 어디서나 다운로드 될 수 있다. ( img-src에 "*" 로 표시).
- 미디어는 media1.com 와 media2.com 에서만 허용한다 ( 그리고 이들 호스트의 서브도메인은 제외한다).
- 실행 가능한 스크립트는 오로지 userscripts.example.com에서만 허용한다.
Example 4
온라인 뱅킹 사이트의 관리자가 사용자의 사이트 접속시 공격자가 내용을 엳듣는 것을 방지하기 위해서, 사이트의 모든 콘텐츠가 SSL을 사용해서 전달되도록 하기를 원한다면 다음과 같습니다.
Content-Security-Policy: default-src https://onlinebanking.jumbobank.com
기본 콘텐츠가 전달되는 곳은 지정된 onlinebanking.jumbobank.com 가 HTTPS를 통해서만 사용하도록 정하고 있다.
Example 5
웹 메일 사이트의 관리자가 이메일 안의 HTML을 사용하게 하려하고 이미지는 어느 서버에서나 적재할 수 있지만 Javascript 혹은 다른 잠재적이고 위험한 콘텐츠가 아닌 곳에서는 허용하지 않는다.
Content-Security-Policy: default-src 'self' *.mailsite.com; img-src *
이 예제는 CSP에 script-src
;를 이용하지 않았지만 이 사이트는 default-src 디렉티브에 명시되어 설정된다. 이 의미는 스크립트들은 콘텐츠가 적재된 원래 서버에서만 적재될 수 있다는 의미이다.
Testing your policy
To ease deployment, CSP can be deployed in "report-only" mode. The policy is not enforced, but any violations are reported to a provided URI. Additionally, a report-only header can be used to test a future revision to a policy without actually deploying it.
You can use the Content-Security-Policy-Report-Only
HTTP header to specify your policy, like this:
Content-Security-Policy-Report-Only: policy
If both a Content-Security-Policy-Report-Only
header and a Content-Security-Policy
header are present in the same response, both policies are honored. The policy specified in Content-Security-Policy
headers is enforced while the Content-Security-Policy-Report-Only
policy generates reports but is not enforced.
Note that the X-Content-Security-Policy-Report-Only
header was used before Firefox 23. If both the X-Content-Security-Policy-Report-Only
and Content-Security-Policy-Report-Only
are sent, the Content-Security-Policy-Report-Only
will be used and the X-Content-Security-Policy-Report-Only
will be ignored.
The UserCSP Addon also helps test and develop Content Security Policies for a site.
See also
- Introducing Content Security Policy
- CSP policy directives
- Using CSP violation reports
- Content Security Policy recommendation bookmarklet