Cuando intenté implementar mi aplicación en dispositivos con sistema Android por encima de 5.0.0 ( Lollipop ), seguí recibiendo este tipo de mensajes de error:
07-03 18: 39: 21.621: D / SystemWebChromeClient (9132): file: ///android_asset/www/index.html: Línea 0: Se negó a cargar el script 'http: // xxxxx' porque viola el siguiente contenido Directiva de política de seguridad: "script-src 'self' 'unsafe-eval' 'unsafe-inline'". 07-03 18: 39: 21.621: I / chromium (9132): [INFO: CONSOLE (0)] "Se negó a cargar el script 'http: // xxx' porque viola la siguiente directiva de política de seguridad de contenido:" script- src 'self' 'unsafe-eval' 'unsafe-inline' ".
Sin embargo, si lo implementé en un dispositivo móvil con sistema Android de 4.4.x ( KitKat ), la política de seguridad funciona con las predeterminadas:
<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 *">
Entonces pensé, tal vez, debería cambiar a algo como esto:
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'; style-src 'self' 'unsafe-inline'; media-src *">
Básicamente, ambas opciones no funcionan para mí. ¿Cómo puedo solucionar este problema?
fuente
Respuestas:
Intente reemplazar su metaetiqueta con esto a continuación:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />
O además de lo que tiene, debe agregar
http://*
a ambosstyle-src
y,script-src
como se ve arriba, agregar después de 'self'.Si su servidor incluye el
Content-Security-Policy
encabezado, el encabezado anulará el meta.fuente
La auto respuesta dada por MagngooSasa funcionó, pero para cualquier otra persona que intente entender la respuesta, aquí hay algunos detalles más:
Al desarrollar aplicaciones de Cordova con Visual Studio, traté de importar un archivo JavaScript remoto [ubicado aquí http://Guess.What.com/MyScript.js], pero tengo el error mencionado en el título.
Esta es la meta etiqueta antes , en el archivo index.html del proyecto:
<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 *">
Aquí está la metaetiqueta corregida , para permitir la importación de un script remoto:
<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';** ">
¡Y no más error!
fuente
Se resolvió con:
script-src 'self' http://xxxx 'unsafe-inline' 'unsafe-eval';
fuente
Para cualquiera que busque una explicación completa, le recomiendo que eche un vistazo a la Política de seguridad de contenido: https://www.html5rocks.com/en/tutorials/security/content-security-policy/ .
Los ataques XSS se basan en la incapacidad del navegador para distinguir el código de su aplicación del código descargado de otro sitio web. Por lo tanto, debe incluir en la lista blanca los orígenes del contenido desde el que considera seguro descargar contenido, utilizando el
Content-Security-Policy
encabezado HTTP.Esta política se describe mediante una serie de directivas de política, cada una de las cuales describe la política para un determinado tipo de recurso o área de política. Su política debe incluir una directiva de política default-src, que es una alternativa para otros tipos de recursos cuando no tienen políticas propias.
Entonces, si modifica su etiqueta a:
<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';** ">
Usted está diciendo que usted está autorizando la ejecución de código Javacsript (
script-src
) desde los orígenes'self'
,http://onlineerp.solution.quebec
,'unsafe-inline'
,'unsafe-eval'
.Supongo que los dos primeros son perfectamente válidos para su caso de uso, no estoy seguro de los otros.
'unsafe-line'
y'unsafe-eval'
plantean un problema de seguridad, por lo que no debe usarlos a menos que tenga una necesidad muy específica de ellos:fuente
Cadena de permisos completa
Las respuestas anteriores no solucionaron mi problema, porque no incluyen
blob: data: gap:
palabras clave al mismo tiempo; así que aquí hay una cadena que hace:<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:;">
Advertencia: esto expone el documento a muchas vulnerabilidades. Asegúrese de evitar que los usuarios ejecuten código en la consola o de estar en un entorno cerrado como una aplicación Cordova .
fuente
Usamos esto:
<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'">
fuente
Para desarrollar un poco más sobre esto, agregue
script-src 'self' http://somedomain 'unsafe-inline' 'unsafe-eval';
a la metaetiqueta así,
<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 *">
corrige el error.
fuente
Agregar la metaetiqueta para ignorar esta política no nos ayudó, porque nuestro servidor web estaba inyectando el
Content-Security-Policy
encabezado en la respuesta.En nuestro caso, estamos usando Ngnix como servidor web para una aplicación Tomcat 9 basada en Java. Desde el servidor web, está dirigiendo el navegador para que no lo permita
inline scripts
, por lo que para una prueba temporal lo hemos desactivadoContent-Security-Policy
comentando.Cómo apagarlo en ngnix
De forma predeterminada, el archivo ngnix ssl.conf tendrá esto agregando un encabezado a la respuesta:
#> grep 'Content-Security' -ir /etc/nginx/global/ssl.conf add_header Content-Security-Policy "default-src 'none'; frame-ancestors 'none'; script-src 'self'; img-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self';";
Si solo comenta esta línea y reinicia ngnix, no debería agregar el encabezado a la respuesta.
fuente
La razón probable por la que recibe este error es probable que haya agregado el / build carpeta a su archivo .gitignore o, en general, no la haya registrado en Git.
Entonces, cuando empujas a Heroku maestro de , la carpeta de compilación a la que hace referencia no se envía a Heroku. Y es por eso que muestra este error.
Esa es la razón por la que funciona correctamente a nivel local, pero no cuando lo implementó en Heroku.
fuente