Extension의 CSP 설정
XSS 공격을 막기 위해서 크롬 익스텐션은 Content Security Policy (이하 CSP)라는 보안 정책을 갖고 있다.
익스텐션에서 로드되거나 실행되는 컨텐츠의 범위를 제한하는 방법으로 동작하며,
블랙리스트 방식과 화이트리스트 방식을 모두 적용할 수 있다.
크롬 익스텐션엔 기본적으로 크롬 API와 호스트 등을 제한하는 Permissions 정책이 있긴 하지만,
CSP는 이보다 더 상위에, 별도로 존재하는 보안 정책이다.
`unsafe-eval`을 추가하는 방법으로 허용할 수 있다. 아래와 같이 정의하면 된다.
- 기본값일 경우 (eval, inline js, 외부 스크립트 import 불가)
"content_security_policy": script-src 'self'; object-src 'self'
- HTTPS 스킴의 리소스를 사용할 수 있게 하려는 경우
"content_security_policy": "script-src 'self' https://*.example.com; object-src 'self'"
- `eval()`이나 `setTimeout(String)`, `new Function(String)`과 같은 자바스크립트를 실행하길 원하는 경우('unsafe-eval' 추가)
"content_security_policy": "script-src 'self’ ‘unsafe-eval'; object-src 'self'"
CSP 설정은 익스텐션의 background 페이지나 이벤트 popup 페이지에 해당하는 것이다.
Content 스크립트는 CSP 대상이 아니고, CSP 룰이 적용되지 않는다.
Content 스크립트가 페이지의 CSP에 영향을 받지 않기 때문에,
가능하다면 DOM에 스크립트를 추가하는 것보다는 컨텐트 스크립트에 정의하는 것이 좋다.
최근댓글