Google Play 警告:您的应用包含跨应用脚本漏洞

Posted

技术标签:

【中文标题】Google Play 警告:您的应用包含跨应用脚本漏洞【英文标题】:Google Play warning: Your app contains a Cross-App Scripting Vulnerability 【发布时间】:2019-04-05 07:55:38 【问题描述】:

大家好,

我收到一封来自 google play 的电子邮件,内容涉及我发布的一个或多个应用程序中的跨应用程序脚本漏洞。我在我的应用程序中使用 WebView,所以他们说我的应用程序包含 webView 跨应用程序脚本问题,这可能允许恶意应用程序窃取用户 cookie 和其他数据。他们给出了我将要采取的行动,那就是

需要采取行动

请按照以下步骤解决您的应用程序存在的问题(列于本电子邮件末尾)。您可以参阅 Play 管理中心中的通知,了解解决此问题的截止日期。在此截止日期之后,如果漏洞仍然存在,受影响应用程序的更新将被阻止。您发布的 APK 版本将不受影响。 其他详细信息

启用 javascript 并加载从不受信任的 Intent 读取的数据的 WebView 可能会被恶意应用欺骗,使其在不安全的上下文中执行 JavaScript 代码。您应该通过以下方式之一防止此漏洞:

选项 1:确保不导出受影响的活动

查找任何具有受影响 WebView 的活动。如果这些活动不需要从其他应用程序中获取 Intent,您可以为清单中的活动设置 android:exported=false。这可确保恶意应用无法向这些 Activity 中的任何 WebView 发送有害输入。

选项 2:保护导出活动中的 WebView

如果您想将受影响的 WebView 设置为导出的 Activity,那么我们建议您进行以下更改:

更新你的 targetSdkVersion

确保您的 targetSdkVersion 符合 Google Play 的目标 API 级别要求。 targetSdkVersion 为 16 或更低的应用程序在当前加载的页面上下文中评估传递给 loadUrl 的 JavaScript URL。针对 SDK 版本 16 或更低版本并使用来自不受信任的 Intent 的未经处理的输入调用 loadUrl,攻击者可以在受影响的 WebView 中执行有害脚本。

保护对评估Javascript的调用

确保评估Javascript 的参数始终是可信的。使用来自不受信任的 Intent 的未经处理的输入调用 evaluateJavascript,攻击者可以在受影响的 WebView 中执行有害脚本。

防止不安全的文件加载

确保受影响的 WebView 无法加载 cookie 数据库。从不受信任的 Intent 中加载未经处理的 file:// URL 的 WebView 可能会被恶意应用程序以下列方式攻击。恶意网页可以将脚本标签写入 cookie 数据库,然后恶意应用程序可以发送带有指向您的 WebView cookie 数据库的 file:// URL 的 Intent。如果 cookie 数据库加载到 WebView 中,恶意脚本就会执行,并且可以窃取会话信息。

您可以通过两种方式确保受影响的 WebView 无法加载 WebView cookie 数据库。您可以禁用所有文件访问,也可以验证任何加载的 file:// URL 是否指向安全文件。请注意,攻击者可以使用符号链接来欺骗对 URL 路径的检查。为防止此类攻击,请务必在加载之前检查任何不受信任的 file:// URL 的规范路径,而不是仅检查 URL 路径。

所以我的问题是

    如果我进行了电子邮件中提到的更改,这将如何影响我的应用程序?

    我的应用程序的任何功能会被禁用吗?

【问题讨论】:

你解决了吗?我也一样。 【参考方案1】:

进入android Manifest,如果webactivity有android:exported=”true“,改成android:exported=”false“

转到清单,并在 Webview 活动中添加以下行

<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />

【讨论】:

android:exported 这个元素设置activity是否可以被其他应用程序的组件启动——如果可以,则为“true”,否则为“false”。如果为“false”,则该活动只能由同一应用程序的组件或具有相同用户 ID 的应用程序启动。 developer.android.com/guide/topics/manifest/…【参考方案2】:

答案取决于您使用 WebView 的目的。如果您只是使用 WebView 作为从 html 显示用户界面的便捷方式,无论是在您的应用程序中硬编码还是从您的网络服务器加载,您都不会遇到问题。只需遵循选项 1,其他应用将无法对您的 Web 视图进行 CSS 攻击。

如果您的应用旨在让其他应用使用 Web 视图,那么答案会复杂得多。您需要提供更多信息,说明您将 Activity 与 Web 视图一起用于什么目的,以及您的问题中的其他应用应该如何使用它们。

【讨论】:

【参考方案3】:

简单回答您的应用不会有任何变化。 基本上

什么是跨应用脚本 (CAS)?

跨应用程序脚本 (CAS) 是一个影响应用程序的漏洞,这些应用程序不以详尽的方式检查输入。 CAS 允许攻击者插入修改特定应用程序行为的数据。这使得从用户系统内部提取数据成为可能。攻击者在利用 CAS 漏洞时可以获得被攻击应用程序的全部权限;攻击在某种程度上独立于底层操作系统和硬件架构。

所以只需在您的网络应用中进行更改..

访问此网址了解更多信息

https://www.acunetix.com/websitesecurity/cross-site-scripting/

【讨论】:

【参考方案4】:
After a lot of struggle, below things worked for me       


 mWebView.getSettings().setAppCacheMaxSize(0);
 mWebView.getSettings().setAllowFileAccess(false);
 mWebView.getSettings().setAppCacheEnabled(false);

<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />

【讨论】:

无需删除文件访问权限或禁用应用缓存,只有清单中的以下行将解决问题 【参考方案5】:

我的应用需要使用 WebView 来访问网站和本地文件。我按照电子邮件提供的说明通过了跨应用脚本漏洞安全测试。

    保护对评估Javascript 和 loadUrl 的调用。 防止不安全的文件加载。

第一步是在使用webView.loadUrl方法时,屏蔽使用Javascript URL scheme的URL,即URL以“javascript:”字符串开头。第 2 步是使用 shouldInterceptRequest 方法或 shouldOverrideUrlLoading 方法阻止本地文件 URI,如果本地文件 URI 不属于您的文件夹。

这些更改不会影响我的应用,因为我的 WebView 不需要使用 Javascript URL 方案,并且我的 WebView 不需要访问所有本地文件。

【讨论】:

【参考方案6】:

这次事件后你的排名下降了吗?

【讨论】:

这应该是一个评论,如果你没有特权,请稍等。

以上是关于Google Play 警告:您的应用包含跨应用脚本漏洞的主要内容,如果未能解决你的问题,请参考以下文章

Google 开发者控制台中的“我们检测到您的应用正在使用旧版本的 Google Play 开发者 API”警告是啥?

Google Play 控制台警告应用正在使用不受支持的 API

PLAY CONSOLE WEB VIEW 跨应用脚本漏洞

google play 的应用发布流程是不是会读取应用的代码?

错误记录Google Play 上架报错 ( 您的应用包含违反“元数据”政策的内容 | GP 政策中心 )

google play store 警告:App Bundle 包含原生代码,建议上传去混淆文件