관리 메뉴

의미없는 블로그

[Appscan] Content-Security-Policy 본문

카테고리 없음

[Appscan] Content-Security-Policy

SaltLee 2025. 2. 12. 11:31

 

example.com/Viewer.aspx?path=");+alert(1);'>// 에서 스크립트 실행됨

<body onload='viewer_imageLoading(""); alert(1);'>//");'> 여가지고

 

근데 이거 CSP 로 막을 수 있다고 함

 

Content-Security-Policy 헤더를 

script-src 'self' 라고 하면

현재 도메인 에서만 스크립트를 로드할 수 있음 

같은 도메인에서 제공하는 .js 파일만 실행 가능함 

<script src="/js/main.js"></script> 이런거

 

<script src="https://cdn.example.com/library.js"></script> 이건 안됨

이거 써야하면 

Content-Security-Policy: script-src 'self' https://cdn.example.com; 이렇게 해야함

 

그리고 <script>alert(1);</script>  이런 <script>구문도 차단됨

<button onclick=    onclick 같은 이벤트 핸들러 내 자바 스크립트도 차단됨

이거 써야하면 

Content-Security-Policy: script-src 'self' 'unsafe-inline'; 해야하는데

그럼 또 xss 가능성이 있는거 아니냐

 

 

 

 

 

CSP(Content Security Policy) 헤더를 사용하여 웹 페이지가 로드할 수 있는 외부 리소스의 출처를 제한하거나 허용할 수 있다는 것입니다.

 

 

Content-Security-Policy: default-src 'self';

 

defaul-src 'self'

현재 사이트에서만 리소스를 로드

외부 사이트에서 가져온 스크립트, 스타일, 이미지 등은 차단

CDN, API, 외부 스크립트 등이 작동하지 않을 수 있음

폰트도 차단될 수 있음

 

해결 방법

Content-Security-Policy: 
    default-src 'self';
    script-src 'self' https://cdnjs.cloudflare.com;
    style-src 'self' https://fonts.googleapis.com 'nonce-ABC123';
    img-src 'self' data:;
    font-src 'self' https://fonts.gstatic.com;
    frame-src 'self' https://www.youtube.com;
    connect-src 'self' https://api.example.com;
    report-uri /csp-violation-report;

 

 

 

  • 내부 사용자가 실수로 XSS 코드가 포함된 입력을 남기면 내부 서비스 내에서 악용될 가능성이 있음.
  • 예: 악성 JavaScript를 포함한 게시글을 올려 다른 내부 직원들이 클릭하면 감염될 수 있음.

default-src 'self' 설정 되어있어도

HTML 내부에 직접 작성된 <Script></sciprt> 구문 있으면 실행됨

 

script-src 'self' 도 외부에서 로드된 스크립트만 제한하는거라

인라인 스크립트는 차단 안됨

 

 

CSP 취지가 외부에서 들어오는 리소스에 포함된 스크립트를 차단하자는 취지라서

XSS 랑 별개로 가려고 한다

어차피 default-src 'self' 로 설정해도 

내부에 스크립트 구문 있으면 실행되는거니까

 

엄격하게 보면 내부망도 조치하라고 하는게 맞긴한데

외부 리소스 차단 시 불편함이 더 크다고 생각

 

어차피 XSS 취약점 별도로 검사하니까

 

내부망 서비스라 외부 리소스 사용으로부터 단절되어 있음 이라고 해야겠다

(인라인 스크립트에 대한 검증은 XSS 항목으로 별도 수행)

 

 

Comments