CSP unsafe-hashes소스 목록 키워드

반응형

경고

CSP 키워드에서 접두사를 볼 때마다 unsafe이를 사용하는 것이 가장 안전한 방법이 아니라는 의미입니다. onloadHTML 이벤트 핸들러 속성(예 : onclick, onmouseover등) 을 사용하지 않도록 코드를 리팩터링하는 것이 좋습니다.

사용 예unsafe-hashes

애플리케이션 전체에 다음과 같은 코드가 있다고 가정해 보세요.

<버튼 onClick="doSomething();">

를 사용하여 Content-Security-Policy사이트에서 을 활성화하면 script-src위 코드가 이제 CSP 정책을 위반한다는 사실을 알게 될 것입니다. 이는 인라인 스크립트로 간주되어 특별히 허용하지 않는 한 차단되기 때문입니다.

안전하지 않은 해시를 사용하면 코드의 SHA-256 해시를 계산하여 이를 수행할 수 있습니다 . 이 경우 doSomething();해시된 결과를 얻습니다.

RFWPLDbv2BY+rCkDzsE+0fr8ylGr2R2faWMhq4lfEQc=

이를 허용하려면 헤더 script-src의 지시문 에 다음을 추가할 수 있습니다 .Content-Security-Policy

script-src '안전하지 않은 해시' 'sha256-RFWPLDbv2BY+rCkDzsE+0fr8ylGr2R2faWMhq4lfEQc='

이렇게 하면 자바스크립트가 doSomething();버튼에서 실행될 수 있지만 공격자가 삽입한 요소에서도 실행될 수도 있습니다.

안전하지 않은 해시 대신 무엇을 사용해야 합니까?

앞서 언급했듯이 소스 목록은 안전하지 않은unsafe-hashes 것으로 간주될 수 있으므로 이벤트 핸들러 로직을 JavaScript 파일로 이동하는 것이 더 나은 접근 방식입니다.

예를 들어 코드를 다음과 같이 다시 작성할 수 있습니다.

<button id="doSomethingButton">

그런 다음 JS 파일에 다음을 추가합니다.

document.getElementById("doSomethingButton").addEventListener("클릭", function() {
	doSomething();
});

또는 jQuery를 사용하는 경우 JavaScript 파일에 다음과 같은 것을 사용할 수 있습니다.

$('#doSomethingButton').click(function() {
	doSomething();
});

브라우저 지원unsafe-hashes

 unsafe-hashes지시문은 CSP 레벨 3에 추가되었습니다. 현재 Chrome 69+ 또는 Chromium Based Edge 79+에서 지원됩니다. Safari 15.4는 unsafe-hashes.

반응형