run instalar javascript android cordova content-security-policy

javascript - instalar - Se negó a cargar el script porque viola la siguiente directiva de Política de Seguridad de Contenido



cordova-android npm (7)

Agregar metaetiquetas para ignorar esta política no nos ayudó, porque nuestro servidor web está inyectando el Content-Security-Policy en la respuesta.

En nuestro caso, estamos utilizando Ngnix como servidor web para la aplicación basada en Java tomcat9. Desde el servidor web se le indica al navegador que no permita inline scripts , por lo que para una prueba temporal hemos desactivado Content-Security-Policy mediante comentarios.

¿Cómo apagar en ngnix?

  • Por defecto, ngnix ssl.conf tendrá este encabezado agregado 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 encabezado a la respuesta.

Si le preocupa la seguridad o la producción, no siga esto, siga estos pasos solo como prueba y para continuar.

Cuando traté de implementar mi aplicación en dispositivos con sistema Android superior a 5.0.0, seguía recibiendo este tipo de mensajes de error:

07-03 18: 39: 21.621: D / SystemWebChromeClient (9132): archivo: ///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): [INFORMACIÓN: CONSOLA (0)] "Se rehusó 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 un sistema Android de 4.4.x, 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í. ¿Alguien tiene una idea de cómo resolver este problema?


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://* tanto a style-src como a script-src como se ve arriba, agregado después de ''self''

Si su servidor incluye el Content-Security-Policy , el encabezado anulará el meta.


La respuesta automática dada por MagngooSasa hizo el truco, pero para cualquier otra persona que intente entender la respuesta, aquí hay algunos detalles más:

Al desarrollar aplicaciones Cordova con Visual Studio, traté de importar un archivo javascript remoto [ubicado aquí http://Guess.What.com/MyScript.js] , pero con el error mencionado en el título.

Aquí está la etiqueta Meta 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!


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/ .

"El código de https://mybank.com solo debe tener acceso a los datos de https://mybank.com , y https://evil.example.com nunca debería tener permitido el acceso. Cada origen se mantiene aislado del resto de la web "

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 de contenido de los que considera seguro descargar contenido, utilizando el encabezado HTTP Content-Security-Policy .

Esta política se describe utilizando 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 predeterminada-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'';** ">

Está diciendo que está autorizando la ejecución del código Javacsript ( script-src ) desde los orígenes ''self'' , http://onlineerp.solution.quebec , ''unsafe-inline'' , ''unsafe-eval'' .

Supongo que los dos primeros son válidamente válidos para su caso de uso, estoy un poco inseguro sobre 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 para ellos:

"Si eval y sus hermanos de texto a JavaScript son completamente esenciales para su aplicación, puede habilitarlos agregando ''nosafe-eval'' como fuente permitida en una directiva script-src. Pero, de nuevo, no lo haga. la capacidad de ejecutar cadenas hace que sea mucho más difícil para un atacante ejecutar código no autorizado en su sitio ". (Mike West, Google)


Para elaborar un poco más sobre esta adición

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


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''">


resuelto con

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