CSP(Content-Security-Policy) > 웹개발

본문 바로가기

회원로그인

회원가입

웹개발

header CSP(Content-Security-Policy)

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 177회 작성일 23-02-22 13:17

본문

https://csp-evaluator.withgoogle.com/ 


출처 : https://jdh5202.tistory.com/820


CSP 개요
    Mozilla가 개발한 표준으로 XSS, Data Injection, Click Jacking 등의 공격을 방지하기 위한 컨텐츠 기반 보안 정책
    SOP(Same Origin Policy)와 비슷하지만 CSP는 웹 사이트 관리자가 규칙 적용
    웹 서버는 웹 사이트에서 사용 가능한 CSP 헤더를 브라우저에게 전달, 브라우저는 이를 기반으로 웹 페이지 렌더링
    인라인 자바스크립트(태그 내에 자바스크립트 명령어 작성) 실행 금지 설정 가능
    특정 웹사이트(origin)에서만 자원을 불러오도록 설정하여 공격자 서버에 요청을 차단
    공격자가 웹 사이트에 본래 존재하지 않던 스크립트 삽입하는 것을 방지
    CSP 보안 정책을 정의한 상태에서 공격자가 다른 소스의 스크립트를 로딩 시 에러 출력



CSP 사용 헤더
    Content-Secuirty-Policy : W3C가 지정한 표준 헤더 - 주로 사용
    X-Content-Secuirty-Policy : FireFox/IE 구형 브라우저에서 사용되는 헤더
    X-WebKit-CSP : 크롬 기반 구형 브라우저에서 사용되는 헤더



 CSP 지시문 및 옵션
    지시문
        default-src : 모든 리소스에 대한 정책
        script-src : Javascript 등 웹에서 실행 가능한 스크립트에 대한 정책
        style-src : css에 대한 정책
        connect-src : script src로 불러올 수 있는 url에 대한 정책
        img-src : 이미지 ( data: URL에서 이미지가 로드되는 것을 허용하려면 data:를 지정 )
        script-nonce : script-src에 nonce가 포함되는 정책
        form-action : form 태그 내 action 부분에 대한 정책
        object-src : 플러그인, 오브젝트에 대한 정책
        media-src : video, audio
        font-src : font
        sandbox : HTML 샌드박스
        reflected-xss : X-XSS-Protection header와 동일한 효과
        report-uri : 정책 위반 케이스가 나타났을 때 내용을 전달할 URL
        base-uri: <base> 요소에 나타날 수 있는 URL을 제한
 


옵션(src)
    * : 모든 것을 허용
    'none' : 모두 차단
    'self' : 현재 도메인만 허용
    'unsafe-inline' : 소스코드 내 인라인 자바스크립트 및 CSS 허용
    'unsafe-eval' : eval 같은 텍스트-자바스크립트 메커니즘 허용



예시
    하위 도메인 리소스만 사용
        Content-Security-Policy: default-src 'self'

    특정 도메인만 신뢰
        Content-Security-Policy: default-src 'self' *.mydomain.com

    특정 태그만 허용
        Content-Security-Policy: default-src 'self' *.mailsite.com; img-src *

    특정 도메인만 무조건 SSL 통신
        Content-Security-Policy: default-src https://onlinebanking.jumbobank.com



<?php
//=====================================
// 2023.02.22 캐시재사용 대응방안
header("Cache-Control: no-cache,must-revaildate");
header("Pragma:no-cache");

// 2023.02.22 잘못된 보안 구성 대응방안
$h_url = " data: gap: *.snue.ac.kr *.widerplanet.com *.jsdelivr.net *.gstatic.com *.googleapis.com http://ajax.googleapis.com";
$hs_url = "https://use.fontawesome.com https://match.adsrvr.org https://astg.widerplanet.com https://cm.g.doubleclick.net https://cdn-aitg.widerplanet.com https://fonts.googleapis.com https://stdpay.inicis.com https://stdux.inicis.com";
$hs_url .= " https://maxcdn.bootstrapcdn.com https://cdnjs.cloudflare.com";

$headerCSP = "Content-Security-Policy:"
    . "default-src 'self' " . $h_url . " " . $hs_url . " ; "
    . "connect-src 'self' " . $h_url . " " . $hs_url . " ; "
    . "script-src 'unsafe-inline' 'self'  " . $h_url . " " . $hs_url . " ; "
    . "style-src 'unsafe-inline' 'self' " . $h_url . " " . $hs_url . " ; "
    . "img-src 'self' " . $h_url . " " . $hs_url . " ; "
    . "";
header($headerCSP);
//=====================================




댓글목록

등록된 댓글이 없습니다.