[javascript] 다음 콘텐츠 보안 정책 지침을 위반하여 스크립트로드를 거부했습니다.

5.0.0 ( Lollipop ) 이상의 Android 시스템이있는 기기에 앱을 배포하려고 할 때 다음과 같은 오류 메시지가 계속 표시됩니다.

07-03 18 : 39 : 21.621 : D / SystemWebChromeClient (9132) : file : ///android_asset/www/index.html : 0 행 : 다음 콘텐츠를 위반하여 ‘http : // xxxxx’스크립트로드 거부 보안 정책 지시문 : “script-src ‘self’ ‘unsafe-eval’ ‘unsafe-inline'”. 07-03 18 : 39 : 21.621 : I / chromium (9132) : [INFO : CONSOLE (0)] “다음 콘텐츠 보안 정책 지침을 위반했기 때문에 ‘http : // xxx’스크립트로드 거부 :”script- src ‘self’ ‘unsafe-eval’ ‘unsafe-inline’ “입니다.

그러나 Android 시스템 4.4.x ( KitKat )가 설치된 모바일 장치에 배포 한 경우 보안 정책은 기본 정책으로 작동합니다.

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

그런 다음 다음과 같이 변경해야한다고 생각했습니다.

<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'; style-src 'self' 'unsafe-inline'; media-src *">

기본적으로 두 가지 옵션이 모두 작동하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?



답변

아래의 메타 태그를 다음으로 바꾸십시오.

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />

또는 당신이 무엇을뿐만 아니라, 당신은 추가해야 http://*모두 style-srcscript-src위에서 본 ‘자기’이후에 추가한다.

서버에 Content-Security-Policy헤더 가 포함되어 있으면 헤더가 메타보다 우선합니다.


답변

MagngooSasa에 의해 주어진 자기의 대답은 트릭을했지만 다른 사람이 대답을 이해하려고 노력을 위해, 여기에 몇 가지 좀 더 자세한 사항은 다음과 같습니다 :

Visual Studio로 Cordova 앱을 개발할 때 원격 JavaScript 파일 (http://Guess.What.com/MyScript.js에 있음)을 가져 오려고했지만 제목에 오류가 있습니다.

다음은 프로젝트의 index.html 파일에서 앞에 있는 메타 태그입니다 .

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

다음은 원격 스크립트를 가져올 수 있도록 수정 된 메타 태그입니다.

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *;**script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval';** ">

그리고 더 이상 오류가 없습니다!


답변

다음과 같이 해결되었습니다.

script-src 'self' http://xxxx 'unsafe-inline' 'unsafe-eval';


답변

우리는 이것을 사용했습니다.

<meta http-equiv="Content-Security-Policy" content="default-src gap://ready file://* *; style-src 'self' http://* https://* 'unsafe-inline'; script-src 'self' http://* https://* 'unsafe-inline' 'unsafe-eval'">


답변

완전한 설명을 원하는 사람이라면 콘텐츠 보안 정책 ( https://www.html5rocks.com/en/tutorials/security/content-security-policy/)을 살펴 보시기 바랍니다 .

에서 “코드 https://mybank.com은 단지에 액세스 할 수 있어야한다
https://mybank.com 의 데이터를, 그리고 https://evil.example.com 확실히 액세스를 허용해서는 안됩니다. 각각의 기원이 분리 유지 나머지 웹 “

XSS 공격은 브라우저가 다른 웹 사이트에서 다운로드 한 코드와 앱의 코드를 구별 할 수 없기 때문에 발생합니다. 따라서 Content-Security-PolicyHTTP 헤더를 사용하여 콘텐츠를 안전하게 다운로드 할 수있는 콘텐츠 원본을 화이트리스트에 추가해야합니다 .

이 정책은 일련의 정책 지시문을 사용하여 설명되며, 각 지시문은 특정 리소스 유형 또는 정책 영역에 대한 정책을 설명합니다. 정책에는 자체 정책이 없을 때 다른 리소스 유형에 대한 대비책 인 default-src 정책 지시문이 포함되어야합니다.

따라서 태그를 다음과 같이 수정하면

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *;**script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval';** ">

당신은 Javacsript 코드 (실행 권한을 부여하는 것을 말하는 script-src기원에서)를 'self', http://onlineerp.solution.quebec, 'unsafe-inline', 'unsafe-eval'.

처음 두 가지는 귀하의 사용 사례에 대해 완전히 유효하다고 생각하지만 다른 사례에 대해서는 약간 확신이 없습니다. 'unsafe-line'그리고 'unsafe-eval'당신이 그들에 대한 매우 구체적인 필요가 없다면 당신이 그들을 사용하지 않아야하므로 보안 문제가 포즈 :

“eval 및 text-to-JavaScript 형제가 응용 프로그램에 완전히 필수적인 경우 script-src 지시문에 허용 된 소스로 ‘unsafe-eval’을 추가하여 활성화 할 수 있습니다. 그러나 다시 말하지 마십시오. 문자열을 실행할 수있는 능력은 공격자가 귀하의 사이트에서 승인되지 않은 코드를 실행하는 것을 훨씬 더 어렵게 만듭니다. ” (Mike West, Google)


답변

전체 권한 문자열

이전 답변은 blob: data: gap:동시에 키워드를 포함하지 않기 때문에 내 문제를 해결하지 못했습니다 . 그래서 다음을 수행하는 문자열이 있습니다.

<meta http-equiv="Content-Security-Policy" content="default-src * self blob: data: gap:; style-src * self 'unsafe-inline' blob: data: gap:; script-src * 'self' 'unsafe-eval' 'unsafe-inline' blob: data: gap:; object-src * 'self' blob: data: gap:; img-src * self 'unsafe-inline' blob: data: gap:; connect-src self * 'unsafe-inline' blob: data: gap:; frame-src * self blob: data: gap:;">

경고 : 이로 인해 문서가 많은 악용에 노출됩니다. 사용자가 콘솔에서 코드를 실행하지 못하도록하거나 Cordova 애플리케이션 과 같은 폐쇄 된 환경에 있어야 합니다.


답변

이에 대해 좀 더 자세히 설명하려면

script-src 'self' http://somedomain 'unsafe-inline' 'unsafe-eval';

이렇게 메타 태그에

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; script-src 'self' https://somedomain.com/ 'unsafe-inline' 'unsafe-eval';  media-src *">

오류를 수정합니다.