크로스 사이트 스크립트(XSS) 에 대한 보안 대책 중 CSP에 대해 소개하겠습니다.
https://bziwnsizd.tistory.com/89
CSP(Contents-Security-Policy) : XSS 공격 및 데이터 삽입 공격을 포함한 특정 공격을 감지하고 제한
CSP 설정 방법
1. 메타 태그 설정
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self'
'unsafe-inline' 'unsafe-eval' http://www.google.com">
- style-src 'self' 'unsafe-inline': stylesheet는 자기 도메인에서만 갖고오게 하고 인라인 css 허용
- script-src 'self' 'unsafe-inline' 'unsafe-eval' http://www.google.com : Javascript는 자기 도메인, 인라인 자바스크립트, 텍스트-자바스크립트 그리고 구글 도메인을 허용
출처 : velog.io/@taylorkwon92/%EC%98%A4%EB%8A%98%EC%9D%98-TIL
2. 자바 스크립트 nonce 설정
Content-Security-Policy: none
→ 어떤 것도 허용하지 않음
Content-Security-Policy: default-src
→ 모든 콘텐츠 소스는 모든 사이트에 허용
Content-Security-Policy: default-src ‘self’
→ 자기 도메인만 허용 (하위 도메인에서는 허용 X)
Content-Security-Policy: script-src 'self' https://apis.google.com
→ script-src는 특정 페이지에 대한 스크립트 관련 권한 집합을 제어하는 지시문으로 실행 가능한 스크립트들은 자기 도메인과 https://apis.google.com 에서만 가능
Content-Security-Policy: script-src https://test.com; style-src https://test.com; img-src https://image.test.com;
→ script, stylesheet 는 https://test.com을 통해, img는 https://image.test.com을 통해 다운로드 되는 리소스만 허용됩니다.
Content-Security-Policy: script-src 'sha256-B2yPHKaXnvFWtRChIbabYmUBFZdVfKKXHbWtWidDVF8='
→인라인 스크립트에서 해시를 설정, CSP는 sha256, sha384 and sha512를 지원
Content-Security-Policy: script-src 'nonce-2726c7f26c'
→ 특정 인라인 스크립트 태그만 허용
→ 사용법
<script nonce="2726c7f26c">
var inline = 1;
</script>
우회 방법
1. CRLF Injection
가장 흔한 우회 방법 중 하나라고 생각한다. 방법은 매우 간단하다. 헤더의 정보를 우리가 임의로 수정할 수 있다면, CR(Carriage Return)과 LF(Line Feed)를 삽입하여 아래에 있는 헤더 정보를 header body로 보내 header정보를 무효화 시키는 것이다.
2. Response Header (Status) Modification
다음 방법은 Header 변조다. 우리가 가장 흔히 아는 HTTP Status Code들은 200 OK, 500 Internal Server Error, 404 Not Found가 대표적이다. CSP는 간혹 Status Code에 따라 다르게 반응을 보인다.
3. Adding Valid URL or Uploading to a Valid Server
가장 확실한 방법은 허용된 사이트에 스크립트를 삽입해서 불러오는 방법 혹은 허용되는 사이트를 추가해주는 방법이다.