白名单指南

外部域是应用无法控制的,而域名白名单则是一种控制访问外部域的安全模型。Cordova提供了一项可配置的安全策略来定义哪些外部站点可以访问。默认情况下,新的app被配置成可以访问任何站点。然而在发布到生产环境前,你应该制定一份白名单,限制应用可以访问的域名和子域名。

对于Android(从4.0版本起),Cordova的安全策略是通过一个插件接口来扩展的。你的app应该使用cordova-plugin-whitelist,因为它比之前的Cordova版本提供了更好的安全性和可配置能力。尽管实现白名单插件是可能的,但还是不推荐这样做,除非你的app有非常明确的安全策略需要。查看cordova-plugin-whitelist获取更多的使用和配置详情。

对于其他平台,Cordova遵守W3C Widget Access规范。规范依赖于使用app的config.xml文件里的<access>标签,它是用来声明可以访问的特定域名的。对项目而言,则是基于命令行界面描述的CLI工作流,该文件位于项目的根目录。另外,对于一些特定平台,文件的位置会在后面的段落列出来。

以下的例子展示了<access>白名单语法:

这是新创建的CLI项目的默认值。

你要意识到一些网站会自动从主页重定向到一个不同的url,比如使用https协议或者对特定国家区分的域名。举例来说,http://www.google.com会重定向到使用SSL/TLS的网址https://www.google.com,然后甚至可能重定向到一个地理国家的域名,如https://www.google.co.uk。这样的场景会要求你在初始的白名单上作修改或者补充。在你创建白名单的时候请考虑这点。

注意:白名单只适用于主要的Cordova webview,而不支持内置浏览器webview和在系统浏览器中打开链接。

Android 白名单

如上所说,查看cordova-plugin-whitelist获取更多详情。对于4.0.0之前的cordova-android,可以查看这篇文档的旧版本。

iOS 白名单

Cordova-ios版本4.0需要安装cordova-plugin-whitelist插件,但是它的配置详情同样适用于iOS。<allow-intent><allow-navigation>标签对于cordova-ios 4.x和以上版本来说是新的内容,可以查看cordova-plugin-whitelist文档获取这些标签的使用详情。

对于4.0.0之前的cordova-ios,可以查看这篇文档的旧版本。

应用传输安全(ATS)是IOS 9(Xcode 7)的新特性。它相当于为你的app创建了一个白名单。Cordova CLI 会自动转化<access><allow-navigation>标签为合适的ATS指令。

<access><allow-navigation>标签支持以下两个属性,在两个属性在ATS中也有相同效果:

  1. minimum-tls-version (字符类型, 默认值'TLSv1.2')
  2. requires-forward-secrecy (布尔类型, 默认值true)

查看ATS Technote获取更多信息。

BlackBerry 10 白名单

白名单规则不在www/config.xml中。

BlackBerry 10的通配符使用和其他平台的不同,有两种方式:

  • 任何通过XMLHttpRequest访问的内容需要明确定义。origin="*"配置在这种情况下不起作用。作为一种选择,BlackBerry配置中描述的WebSecurity优先级可以禁用所有的网络安全措施:

    <preference name="websecurity" value="disable" />
    
  • 可以选择设置*.domain,再设置附加的subdomains属性为true。默认情况下应该设为false

    <!-- 仅仅可以访问google.com -->
    <access origin="http://google.com" subdomains="false" />
    
    <!-- 允许访问maps.google.com和docs.google.com -->
    <access origin="http://google.com" subdomains="true" />
    
    <!-- 允许访问所有域名,包括本地`file://`协议 -->
    <access origin="*" subdomains="true" />
    

更多的支持信息,请查看BlackBerry文档access element

Windows Phone 白名单

Windows Phone 8的白名单规则在app的config.xml文件中。