Este complemento implementa una política de lista blanca para navegar por la vista web de la aplicación en Cordova 4.0

Instalación

Puede instalar el complemento de lista blanca con Cordova CLI, desde npm:

$ cordova plugin add cordova-plugin-whitelist
$ cordova prepare

Plataformas Cordova compatibles

  • Android 4.0.0 o superior

Lista blanca de navegación

Controla a qué URL se puede navegar el WebView. Se aplica solo a navegaciones de nivel superior.

Por defecto, las navegaciones solo pueden file:// URLs. Para permitir otras URL, debe agregar <allow-navigation> etiquetas a tu config.xml:

<!-- Allow links to example.com -->
<allow-navigation href="http://example.com/*" />

<!-- Wildcards are allowed for the protocol, as a prefix
     to the host, or as a suffix to the path -->
<allow-navigation href="*://*.example.com/*" />

<!-- A wildcard can be used to whitelist the entire network,
     over HTTP and HTTPS.
     *NOT RECOMMENDED* -->
<allow-navigation href="*" />

<!-- The above is equivalent to these three declarations -->
<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
<allow-navigation href="data:*" />

Quirks: en Android también se aplica a iframes para esquemas que no son http (s).

Lista blanca de intenciones

Controla las URL que la aplicación puede solicitar al sistema que abra.

En config.xml, agregar <allow-intent> etiquetas, como esta:

<!-- Allow links to web pages to open in a browser -->
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />

<!-- Allow links to example.com to open in a browser -->
<allow-intent href="http://example.com/*" />

<!-- Wildcards are allowed for the protocol, as a prefix
     to the host, or as a suffix to the path -->
<allow-intent href="*://*.example.com/*" />

<!-- Allow SMS links to open messaging app -->
<allow-intent href="sms:*" />

<!-- Allow tel: links to open the dialer -->
<allow-intent href="tel:*" />

<!-- Allow geo: links to open maps -->
<allow-intent href="geo:*" />

<!-- Allow all unrecognized URLs to open installed apps
     *NOT RECOMMENDED* -->
<allow-intent href="*" />

Sin ningún <allow-intent> etiquetas, no se permiten solicitudes a URL externas. Sin embargo, la aplicación Cordova predeterminada incluye un conjunto bastante liberal de allow-intent entradas por defecto. Se recomienda reducir esto en función de las necesidades de cada aplicación.

En Android, esto equivale a enviar una intención de tipo BROWSEABLE.

Esta lista blanca no se aplica a complementos, solo hipervínculos y llamadas a window.open().

Lista blanca de solicitudes de red

Controla qué solicitudes de red (imágenes, XHR, etc.) se pueden realizar (a través de los ganchos nativos de cordova).

Nota: Le sugerimos que utilice una Política de seguridad de contenido (ver más abajo), que es más segura. Esta lista blanca es principalmente histórica para las vistas web que no son compatibles con CSP.

En config.xml, agregar <access> etiquetas, como esta:

<!-- Allow images, xhrs, etc. to google.com -->
<access origin="http://google.com" />
<access origin="https://google.com" />

<!-- Access to the subdomain maps.google.com -->
<access origin="http://maps.google.com" />

<!-- Access to all the subdomains on google.com -->
<access origin="http://*.google.com" />

<!-- Enable requests to content: URLs -->
<access origin="content:///*" />

<!-- Don't block any requests -->
<access origin="*" />

Sin ningún <access> etiquetas, solo solicitudes para file:// Se permiten URL. Sin embargo, la aplicación Cordova predeterminada incluye <access origin="*"> por defecto.

Nota: La lista blanca no puede bloquear los redireccionamientos de red desde un sitio web remoto incluido en la lista blanca (es decir, http o https) a un sitio web no incluido en la lista blanca. Utilice las reglas de CSP para mitigar los redireccionamientos a sitios web no incluidos en la lista blanca para las vistas web que admiten CSP.

Quirk: Android también permite solicitudes a https://ssl.gstatic.com/accessibility/javascript/android/ de forma predeterminada, ya que esto es necesario para que TalkBack funcione correctamente.

Política de seguridad de contenido

Controla qué solicitudes de red (imágenes, XHR, etc.) se pueden realizar (a través de webview directamente).

En Android e iOS, la lista blanca de solicitudes de red (ver arriba) no puede filtrar todos los tipos de solicitudes (p. Ej. <video> & WebSockets no están bloqueados). Por lo tanto, además de la lista blanca, debe usar un Política de seguridad de contenido <meta> etiqueta en todas sus páginas.

En Android, la compatibilidad con CSP dentro de la vista web del sistema comienza con KitKat (pero está disponible en todas las versiones que usan Crosswalk WebView).

Aquí hay algunos ejemplos de declaraciones de CSP para su .html páginas:

<!-- Good default declaration:
    * 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 eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
        * Enable inline JS: add 'unsafe-inline' to default-src
        * Enable eval(): add 'unsafe-eval' to default-src
-->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">

<!-- Allow everything but only from the same origin and foo.com -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">

<!-- This policy allows everything (eg CSS, AJAX, object, frame, media, etc) except that 
    * CSS only from the same origin and inline styles,
    * scripts only from the same origin and inline styles, and eval()
-->
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

<!-- Allows XHRs only over HTTPS on the same domain. -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">

<!-- Allow iframe to https://cordova.apache.org/ -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org">