plugin - phonegap android
Cordova+JqueryMobile: Ajax falla con (4)
Debe mantener la política de seguridad del contenido por razones de seguridad:
Un mecanismo de seguridad crítico es la política del mismo origen . Esto restringe la forma en que un documento o script de origen A puede interactuar con un recurso de origen B. Esto significa que la URL http://store.comany.com/dir/page.html puede acceder a las siguientes URL:
Pero no lo siguiente:
- https://store.company.com/secure.html -> Protocolo diferente
- http://store.company.com:81/dir/etc.html -> Puerto diferente
- http://news.company.com/dir/other.html -> host diferente
(Más sobre: https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy )
Sin embargo, los atacantes pueden omitir esta política con secuencias de comandos entre sitios (XSS)
Para evitar los ataques de inyección de datos y XSS, puede usar la Política de seguridad de contenido (desde Here ):
La Política de seguridad de contenido (CSP) es una capa adicional de seguridad que ayuda a detectar y mitigar ciertos tipos de ataques, incluidos los scripts entre sitios (XSS) y los ataques de inyección de datos. Estos ataques se utilizan para todo, desde el robo de datos hasta la eliminación del sitio o la distribución de malware. CSP está diseñado para ser totalmente compatible con versiones anteriores; los navegadores que no lo admiten aún funcionan con servidores que lo implementan, y viceversa. Los navegadores que no son compatibles con CSP simplemente lo ignoran, funcionando como de costumbre, predeterminando la política estándar del mismo origen para el contenido web. Si el sitio no ofrece el encabezado CSP, los navegadores también usan la política estándar del mismo origen.
tl; dr
Es realmente bueno que esto ya esté en el código de ejemplo. Pero tal vez elogiar sería bueno =). Realmente deberías mantener esta configuración para más seguridad.
En su caso, tendría que cambiar la configuración a algo como:
<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 *; connect-src ''self'' http://10.0.2.2">
connect-src limita los orígenes a los que puede conectarse (a través de XHR, WebSockets y EventSource). Debe poner aquí "yo" (para los scripts que están en su dispositivo) y la URL remota (por ejemplo, http://10.0.2.2 )
- @Harry Martel proporcionó un buen enlace con ejemplos sobre cómo configurar su Política de seguridad de contenido.
- Here también hay un artículo con una descripción general de las propiedades de configuración.
(He estado en ello durante las últimas 6 horas) Estoy tratando de hacer una aplicación Phonegap / Cordova. No puedo hacer una llamada Ajax a través del emulador de Android (API ver 22, Android> 4.4). La llamada Ajax funciona en el escritorio de Firefox pero falla incluso en el navegador Chrome (con la misma excepción que en el emulador)
cordova --version 5.0.0
Código:
$.ajax({
url: serverUrl,
type: ''GET'',
contentType: "application/json",
async: true,
dataType: ''jsonp'',
callback: ''callback'',
jsonpCallback: ''yourcallback'',
crossDomain: true,
success: function (result) {
$("#message").html("location sent");
},
error: function (request, error) {
alert(''Error '' + error);
}
});
El error que veo es:
En el depurador remoto de Chrome:
Se negó a conectarse a '' http://10.0.2.2/test/getLocation.php '' porque viola la siguiente directiva de Política de seguridad de contenido: "default-src ''self'' data: gap: https://ssl.gstatic.com '' unsafe-eval ''". Tenga en cuenta que ''connect-src'' no se estableció explícitamente, por lo que ''default-src'' se usa como una alternativa.
He visto todo tipo de configuraciones en blogs y publicaciones, pero no uso. Poniendo algunos aquí para eliminar a los sospechosos habituales.
$.support.cors = true;
$.mobile.allowCrossDomainPages = true;
AppManifest tiene acceso a internet:
<uses-permission android:name="android.permission.INTERNET" />
Config.xml:
<access origin="*" /> (have tried all variation, with putting actual server name here like "http://10.0.2.2" ).
Realmente necesito tu ayuda en esto. Cansado y herido :(
Mensaje de error:
Se negó a conectarse a '' http: // some-address '' porque viola la siguiente directiva de Política de seguridad de contenido: "default-src ''self'' data: gap: https://ssl.gstatic.com ''unsafe-eval''". Tenga en cuenta que ''connect-src'' no se estableció explícitamente, por lo que ''default-src'' se usa como una alternativa.
Cordova 4/5/6 "cordova crea" comando
cordova create yourproject com.yoursite.yourproject yourproject
Está generando proyectos con esta meta tag.
<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 *">
Revise su archivo index.html
vi YourProject/plattforms/ios/www/index.html
o
vi YourProject/plattforms/android/www/index.html
Puede comentar esa línea, pero tenga en cuenta que esta es una política que podría ajustarse a las necesidades de su propia aplicación; en realidad, hay un enlace que puede ver para obtener más orientación:
README: política de seguridad de contenido
Algunas notas:
* gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
* https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
* Disables use of inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
* Enable inline JS: add ''unsafe-inline'' to default-src
Mi error...
Estaba usando la plantilla html de ejemplo de Phonegap ... que tenía la siguiente metaetiqueta que estaba bloqueando XSS.
<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 *">
No estoy seguro de poner esas cosas en un código de ejemplo, es lo correcto o no ... para mí, desperdició mis 2 días.
Puede comprobar lo siguiente:
https://github.com/apache/cordova-plugin-whitelist#content-security-policy
Hay muchas configuraciones para la Política de Seguridad de Contenido.