HTTP 응답 헤더 Content-Security-Policy 덕분에 사이트는 사용자 에이전트가 특정 페이지에 대해 어떤 자원을 로드할지 제어할 수 있습니다. 특별한 경우를 제외하고, 정책 세트는 주로 서버의 소스 및 스크립트 종료점을 지정하는 데 집중됩니다. 이는 사이트 간 스크립팅 공격을 막는 데 도움이 됩니다
문서조사:하이퍼링크 로그인이 보입니다.
이 글은 W3C의 콘텐츠 보안 정책(Content Security Policy, 줄여서 CSP)을 설명합니다. 이름에서 알 수 있듯이, 이 명세는 콘텐츠 보안과 관련이 있으며, 주로 페이지가 로드할 수 있는 자원을 정의하고 XSS의 발생을 줄이는 데 사용됩니다.
초기 크롬은 X-WebKit-CSP 응답 헤더를 통해 CSP를 지원했고, 파이어폭스와 IE는 X-Content-Security-Policy를, Chrome25와 Firefox23은 표준 Content-Security-Policy를 지원하기 시작했습니다.
사용자 이름, 비밀번호, 기기 이름 및/또는 민감한 파일 위치와 같은 웹 애플리케이션에 관한 민감한 정보가 수집될 수 있습니다 초보자는 사용자 이름, 비밀번호, 신용카드 번호, 사회보장번호 등 민감한 정보를 제공하도록 설득될 수 있습니다
먼저, MVC ASP.NET 새 프로젝트를 만들고, 새로운 js 스크립트를 만들고, 다음과 같이 바이두 통계의 js 코드를 동적으로 불러오자:
위 그림에서 보듯, 제3자 JS에 악성 코드(예: 쿠키 훔치기, 콘텐츠 변경, 링크 점프 등)가 포함되어 있다면 JS 스크립트 코드가 성공적으로 도입된 것을 확인할 수 있습니다.
보안이 취약한 서드파티 JS 스크립트의 도입을 어떻게 막을 수 있을까요?
우회 방법
응답 헤드"콘텐츠-보안-정책" 추가하세요.예를 들어:
지침 | 명령어 값의 예시 | 설명 | 기본값-SRC | '자기' cnd.a.com | 모든 유형의 리소스(JS, IMAGE, CSS, WEB FONT, AJAX REQUESTS, IFRAMES, MULTIMEDIA 등)에 대해 기본 로딩 정책을 정의하고, 별도의 정의된 정책이 없으면 특정 리소스 유형에 대해 기본값을 사용하세요. | 스크립트-SRC | '자기' js.a.com | 자바스크립트의 로딩 정책을 정의하세요. | 스타일-SRC | '자기' css.a.com | 스타일에 대한 로딩 정책을 정의하세요. | IMG-SRC | '자기' img.a.com | 이미지에 대한 로딩 정책을 정의하세요. | connect-src | '자아' | Ajax, WebSockets 등에서 오는 요청에 대한 로딩 정책. 허용되지 않으면 브라우저는 상태 400의 응답을 시뮬레이션합니다. | 폰트-src | font.a.com | WebFont의 로딩 정책. | 객체-SRC | '자아' | <object><embed> <applet> 플래시와 같은 플러그인의 로딩 정책이 , , 또는 . | 미디어-SRC | media.a.com | <audio> <video> 또는 와 같은 태그에 대해 도입된 HTML 멀티미디어의 로딩 전략. | 프레임-src | '자아' | 프레임 로딩 정책. | 샌드박스 | 허용 형식 | 요청된 자원에 대해 샌드박스(iframe의 샌드박스 속성과 유사)를 활성화하세요. | 리포트-우리 | /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'가 대체 수단으로 사용됩니다. (끝)
|