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" />
【讨论】:
无需删除文件访问权限或禁用应用缓存,只有清单中的以下行将解决问题我的应用需要使用 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
google play 的应用发布流程是不是会读取应用的代码?