의미없는 블로그
[Appscan] Content-Security-Policy 본문
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 항목으로 별도 수행)