|
HTTP 응답 헤더 Content-Security-Policy를 사용하면 사이트에서 특정 페이지에 대해 사용자 에이전트가 로드하는 리소스를 제어할 수 있습니다. 특별한 경우를 제외하고 이 정책 세트에는 주로 서버의 소스 및 스크립트 엔드포인트를 지정하는 것이 포함됩니다. 이렇게 하면 사이트 간 스크립트 공격(크로스 사이트 스크립트)을 차단하는 데 도움이 됩니다.
문서: https: //developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy
이 문서는 W3C의 콘텐츠 보안 정책(줄여서 CSP)에 관한 문서입니다. 이름에서 알 수 있듯이 이 사양은 콘텐츠 보안과 관련이 있으며 주로 XSS 발생을 줄이기 위해 페이지에 로드할 수 있는 리소스를 정의하는 데 사용됩니다.
초기 Chrome은 X-WebKit-CSP 응답 헤더를 통해 CSP를 지원했고, Firefox와 IE는 X-Content-Security-Policy를 지원했으며, Chrome25와 Firefox23은 표준 Content-Security-Policy를 지원하기 시작했습니다.
사용자 이름, 비밀번호, 컴퓨터 이름 및/또는 민감한 파일 위치와 같은 웹 애플리케이션에 대한 민감한 정보를 수집할 수 있습니다. 사용자 이름, 비밀번호, 신용카드 번호, 주민등록번호 등과 같은 민감한 정보를 제공하도록 주 사용자를 설득할 수 있습니다.
먼저 다음과 같이 Baidu Statistics js 코드를 동적으로 로드하기 위해 새로운 js 스크립트가 포함된 새 ASP.NET MVC 프로젝트를 생성합니다:
위와 같이 써드파티(바이두)의 JS 스크립트 코드가 성공적으로 도입된 것을 확인할 수 있습니다. 써드파티 JS에 쿠키 탈취, 콘텐츠 수정, 링크 점프 등과 같은 악성 코드가 있다고 가정해 보겠습니다.
안전하지 않은 타사 js 스크립트의 도입을 차단하는 방법은 무엇인가요?
솔루션
응답 헤더에 "Content-Security-Policy"를 추가합니다( 예시는 아래와 같습니다):
지시어 | 명령어 값 예시 | 설명 | default-src | 'self' cnd.a.com | 모든 유형의 리소스(js, 이미지, css, 웹폰트, 아약스 요청, iframe, 멀티미디어 등)에 대한 기본 로드 정책을 정의하며, 특정 유형의 리소스에 대한 별도의 정책이 없는 경우 기본값을 사용합니다. | 스크립트-src | 'self' js. | JavaScript에 대한 로딩 정책을 정의합니다. | style-src | 'self' css.a.com | 스타일에 대한 로딩 정책을 정의합니다. | img-src | 'self' img.a.com | 이미지에 대한 로딩 정책을 정의합니다. | connect-src | 'self' | Ajax, WebSocket 등의 요청에 대한 로드 정책을 정의합니다. 허용되지 않으면 브라우저는 400 상태의 응답을 시뮬레이션합니다. | font-src | font.a.com | 웹폰트에 대한 로드 정책. | object-src | 'self' | <객체>, <임베드> 또는 <앱렛>과 같은 태그에 의해 도입된 플래시와 같은 플러그인에 대한 로드 정책. | media-src | media.a.com | <오디오> 또는 <비디오>와 같은 태그에 의해 도입된 HTML 멀티미디어에 대한 로드 정책입니다. | frame-src | 'self' | 프레임에 대한 로딩 정책입니다. | sandbox | allow-forms | 요청된 리소스에 대해 샌드박스를 활성화합니다(iframe의 샌드박스 속성과 유사). | report-uri | /report-uri | 요청된 리소스가 정책에 의해 허용되지 않는 경우 로그 메시지를 제출할 위치를 브라우저에 알려줍니다. 특별: 브라우저에서 콘텐츠는 차단하지 않고 로그만 보고하도록 하려면 Content-Security-Policy-Report-Only 헤더를 대신 사용할 수 있습니다. |
다음과 같이 프로젝트의 web.config 파일을 수정하여 사용자 지정 응답 헤더를 추가해 보겠습니다:
아래와 같이 프로젝트를 다시 실행합니다:
브라우저가 타사 js 스크립트의 로딩을 성공적으로 차단했습니다:
다음 콘텐츠 보안을 위반하므로 'https://hm.baidu.com/hm.js?6dbaac17dfeb2840b5b09d2dff6d2319' 스크립트 로드를 거부했습니다. 정책 지시어: "script-src 'self' http://localhost:56888/ ". 'script-src-elem'이 명시적으로 설정되지 않았으므로 'script-src'가 대체로 사용됩니다. (끝) |
이전 기사:ASP.NET MVC Http애플리케이션 실행 순서다음 글:현재 인기 있는 브라우저 사용자-에이전트 컴파일 요약
|