界: Encapsulation

封装即绘制强边界。在 Web 浏览器中,这可能意味着确保您的移动代码不会被其他移动代码滥用。在服务器上,这可能意味着区分已验证数据和未验证数据、区分一个用户的数据和另一个用户的数据,或者区分允许用户查看的数据和不允许用户查看的数据。

File Based Cross-Zone Scripting

Abstract
如果加载一个文件可能导致在应用程序上下文中运行不可信赖的脚本,则是很危险的。
Explanation
当满足以下条件时会发生 File Based Cross Zone Scripting 漏洞:

1. 加载一个文件,这可能会允许在您的应用程序中运行脚本

2. 加载的脚本采用与运行的应用程序一样的来源。

当满足这两个条件时,可以实现一系列攻击,尤其是当其他各方根据信息是否来自您的应用程序范围内来确定信任时。

例 1:以下代码使用 Android WebView 以便在本地加载文件:

...
myWebView.loadUrl("file:///android_asset/www/index.html");
...

Example 1 中,Android WebView 呈现器会将使用 loadUrl() 通过以“file://”开头的 URL 加载的所有内容视为来源相同。

当从文件进行加载时,攻击者可以通过几种典型方法来利用 File Based Cross-Zone Scripting 漏洞:
- 本地文件可能受可将脚本注入该文件的攻击者操纵。
这将取决于文件权限、文件所在位置,或者文件先保存再加载的竞争条件(可能有供进行修改的时间段)。

- 文件可能会调出到外部资源。
当加载的文件从外部资源检索脚本时,可能会发生这种情况。

例 2:以下代码查看外部数据源,以确定它应该运行的 JavaScript。

<script src="http://www.example.com/js/fancyWidget.js"></script>

Example 2 中,使用了不安全的协议,这可能会允许恶意操作者修改所生成的脚本。或者,可能会执行其他攻击,以将计算机重新路由到攻击者的站点。

- 加载的文件可能包含 cross-site scripting 漏洞。
如果所加载的文件能够注入代码,则注入的代码也许能够在您的应用程序上下文中运行。这不一定是注入 JavaScript 的能力,而仅仅能够注入 HTML 也可以实现涂改或拒绝服务攻击。
References
[1] Erika Chin and David Wagner Bifocals: Analyzing WebView Vulnerabilities in Android Applications
desc.semantic.java.file_based_cross_zone_scripting
Abstract
如果加载本地文件可能导致在应用程序的特许上下文中运行不可信赖的脚本,则是很危险的。
Explanation
当满足以下条件时会发生 File-Based Cross Zone Scripting 漏洞:

1. 加载一个文件,这可能会允许在您的应用程序中运行脚本。


2. 加载的脚本被视为与运行的应用程序具有相同的来源 (file://)。

当满足这两个条件时,可以实现一系列攻击,尤其是当其他各方根据信息是否来自您的应用程序范围内来确定信任时。

示例 1:以下代码使用了 UIWebView.loadRequest(_:) 方法加载本地文件:

...
NSURL *url = [[NSBundle mainBundle] URLForResource: filename withExtension:extension];
[webView loadRequest:[[NSURLRequest alloc] initWithURL:url]];
...


Example 1 中,WebView 引擎会将使用 UIWebView.loadRequest(_:) 通过以 file:// 开头的 URL 加载的所有内容视为位于本地特权文件源中。

当从文件进行加载时,攻击者可以通过几种典型方法来利用 File-Based Cross-Zone Scripting 漏洞:

- 本地文件可能由攻击者控制。例如,攻击者可能将文件发送到受害者,受害者然后又将该文件存储到易受攻击的应用程序(例如:云存储应用程序)。
- 本地文件可能受可将脚本注入该文件的攻击者操纵。这将取决于文件权限、文件所在位置,或者文件先保存再加载的竞争条件(可能有供进行修改的时间段)。
- 文件可能会调出到外部资源。当加载的文件从外部资源检索脚本时,可能会发生这种情况。
- 加载的文件可能包含 cross-site scripting 漏洞。如果正在加载的文件包含注入代码,则此代码可能会在您的应用程序上下文中运行。注入的代码不必是 JavaScript 代码 - 注入的 HTML 也可以实现涂改或拒绝服务攻击。

如果攻击者控制的文件是使用 file:// URL 在本地加载的,则同源策略将允许此文件中的脚本访问来自同一来源的所有其他文件,从而使攻击者可以访问包含敏感信息的任何本地文件。
References
[1] Same-origin policy for file: URIs Mozilla
[2] Old Habits Die Hard: Cross-Zone Scripting in Dropbox & Google Drive Mobile Apps IBM
[3] loadHTMLString(_:baseURL:) API documentation Apple
[4] loadRequest(_:) API documentation Apple
desc.dataflow.objc.file_based_cross_zone_scripting
Abstract
如果加载本地文件可能导致在应用程序的特许上下文中运行不可信赖的脚本,则是很危险的。
Explanation
当满足以下条件时会发生 File-Based Cross Zone Scripting 漏洞:

1. 加载一个文件,这可能会允许在您的应用程序中运行脚本。


2. 加载的脚本被视为与运行的应用程序具有相同的来源 (file://)。

当满足这两个条件时,可以实现一系列攻击,尤其是当其他各方根据信息是否来自您的应用程序范围内来确定信任时。

示例 1:以下代码使用了 UIWebView.loadRequest(_:) 方法加载本地文件:

...
let url = Bundle.main.url(forResource: filename, withExtension: extension)
self.webView!.load(URLRequest(url:url!))
...


Example 1 中,WebView 引擎会将使用 UIWebView.loadRequest(_:) 通过以 file:// 开头的 URL 加载的所有内容视为位于本地特权文件源中。

当从文件进行加载时,攻击者可以通过几种典型方法来利用 File-Based Cross-Zone Scripting 漏洞:

- 本地文件可能由攻击者控制。例如,攻击者可能将文件发送到受害者,受害者然后又将该文件存储到易受攻击的应用程序(例如:云存储应用程序)。
- 本地文件可能受可将脚本注入该文件的攻击者操纵。这将取决于文件权限、文件所在位置,或者文件先保存再加载的竞争条件(可能有供进行修改的时间段)。
- 文件可能会调出到外部资源。当加载的文件从外部资源检索脚本时,可能会发生这种情况。
- 加载的文件可能包含 cross-site scripting 漏洞。如果正在加载的文件包含注入代码,则此代码可能会在您的应用程序上下文中运行。注入的代码不必是 JavaScript 代码 - 注入的 HTML 也可以实现涂改或拒绝服务攻击。

如果攻击者控制的文件是使用 file:// URL 在本地加载的,则同源策略将允许此文件中的脚本访问来自同一来源的所有其他文件,从而使攻击者可以访问包含敏感信息的任何本地文件。
References
[1] Same-origin policy for file: URIs Mozilla
[2] Old Habits Die Hard: Cross-Zone Scripting in Dropbox & Google Drive Mobile Apps IBM
[3] loadHTMLString(_:baseURL:) API documentation Apple
[4] loadRequest(_:) API documentation Apple
desc.dataflow.swift.file_based_cross_zone_scripting