网易首页 > 网易号 > 正文 申请入驻

如何在 iOS 应用程序中安全实现 WebView

0
分享至

这篇文章讨论了如何确保安全的 WebViews 以及如何限制其攻击面。

Webview是我们前端开发从PC端演进到移动端的一个重要载体,现在大家每天使用的App,webview都发挥着它的重要性。其实webview的应用场景远远不止这些,其实在一些PC的软件里,和我们交互的也是我们的html页面,另外,还有一些网络机顶盒里的交互,也是使用webview,比如一些早期的IPTV里的EPG都是运行在webview里的。

由于最近我有机会观察了许多新的WebView应用程序,所以我写了这篇文章。几年前,如果有人想创建一个多平台应用程序,几乎必须在每个平台上创建不同的代码库。随着跨平台框架的出现,通用编码变得越来越容易。通用编码的一种方法是使用WebView。这个想法很简单,就是用web技术(HTML, CSS, JS)创建一个应用程序,然后在本地应用程序中渲染它。WebView只是应用程序中的嵌入式浏览器。这种技术将web应用程序特有的漏洞引入本地应用程序。因为WebView可以被当作浏览器来对待,所以它使用了同样的机制,所以它也可以被滥用。事实证明,被滥用的结果可能更有害。如果应用程序想要获取保存在设备上的一些资源,比如照片或联系人,该怎么办?这就需要开发人员需要创建JavaScript

UIWebView用于在App中嵌入网页内容,通常情况下是html格式的网页,也支持pdf, word等文档。由于UIWebView存在安全漏洞, 2020年4月起,App Store将不再接受使用UIWebView的App,2020年12月起将不再接受使用UIWebView的App更新。苹果表示,App仍在使用已弃用的UIWebView API嵌入网络内容的开发者,应尽快更新为WKWebView以提升安全性和稳定性。WKWebView可将网页处理限制在App的网页视图中,从而确保不安全的网站内容不会影响到App的其他部分。此外,iOS、macOS和Mac Catalyst均支持WKWebView。

UIWebView 是自 2008 年以来在 iOS 2.0 就开始出现的旧 Apple API。如果你关注过漏洞的历史,可能知道 2008 年大多数现代浏览器安全功能尚未发明。不过你也不要指望 2008 年发布的 API 会实现这些安全机制。UIWebView 在 iOS 12.0 中已弃用,如果你的应用程序仍然使用 UIWebView,则应该将其重写为 WKWebView。在开始重构之前,我建议你阅读下一节关于 WKWebViews 的内容,因为它们的实现也可能被不安全地编码。

但是为什么我不推荐使用 UIWebView?具体原因如下:

1.UIWebView 没有允许禁用 JavaScript 的功能,所以如果你的应用程序不使用 JS 并且你想遵循最小权限原则,你不能关闭它。

2.没有处理混合内容的功能,你无法验证是否使用 HTTPS 协议加载了所有内容。他的功能不应该是这样,因为你不应该添加任何App Transport Security异常(允许不安全的HTTP连接的异常)。

3.UIWebView不像WKWebView那样实现进程外渲染。因此,如果攻击者在UIWebView中发现一个内存破坏漏洞,他们将能够在你的应用程序的环境中利用它。

4.通过 file:// 方案的文件访问始终处于打开状态,更糟糕的是,通过该方案访问文件不遵循同源策略(Same Origin Policy)机制。这意味着,如果攻击者利用了WebView中的跨站脚本漏洞,他们可以从应用程序的沙箱中加载可用的文件,然后将它们发送到服务器。

以下是一个不安全的UIWebView样本,我将向你展示我在 macOS 上的 Apple 的 Dictionary.app 中发现的一个漏洞:

Dictionary.app 当然允许从语言 A 翻译到 B。Apple 无法创建所有词典,因此你可以创建你的词典,例如使用民族方言。翻译后的词然后在没有任何验证的情况下显示在 UIWebView 中。我想知道是否有可能利用 file:// 处理程序并窃取本地文件,因此我创建了以下字典条目:

然后,我打开 Dictionary.app,在 127.0.0.1:8000 上启动 netcat 并传输 /etc/passwd 的内容:

以上原因就是我不推荐UIWebView的理由。

WKWebView是你应该用来在应用程序中加载web内容的API。“WK”前缀来自浏览器引擎WebKit。WKWebView是一个应用了所有现代网络安全机制的现代API,它仍然由苹果维护并得到更新。WKWebView的优点是它可以进行进程外渲染,因此如果攻击者发现其中的内存破坏漏洞,应用程序的进程仍然是孤立的。

让我们从 Info.plist 配置开始,在关于 iOS 上的安全网络的文章中,我写了关于应用传输安全异常的文章。这些建议也适用于 WKWebView。确保不允许未加密的 HTTP 连接。WKWebView 可以被视为一个网络浏览器,因此如果攻击者可以执行中间人攻击,他们可以窃取你的 cookie/授权令牌,在你的应用程序环境中执行 JavaScript,因此例如调用 JavaScript

然后,你需要以某种方式加载 HTML 内容。有两种方法:第一种是从应用程序包(本地)加载HTML内容,第二种是从网站加载HTML内容。确保你加载的内容完全由你控制。如果从外部资源加载JavaScript代码,可以使用完整性属性验证它是加密哈希。对于高风险应用,建议应用逆向工程保护。在WebView世界中,你可以缩小JavaScript文件,甚至混淆它们。

现在,介绍一下加固(Hardening)。file:// 方案始终在 WKWebView 中启用,但它不能(默认情况下)访问文件。可以启用该机制,但请记住最小权限原则。如果你的 WebView 不一定要访问文件,请不要打开它。

相反,JavaScript解释器是默认打开的。如果你的网站不使用JS,建议关掉它(再次强调,使用最小权限原则)。你可以使用以下代码:

我想在本文中讨论的最后一个功能是桥。WKWebView允许从JavaScript调用本地代码。你现在可能已经意识到,如果编码不当,它可能会造成多大的危害。两年前,我在测试一个iOS应用程序,它使用这种桥从用户的照片库中获取照片。我发现了一个存储跨站点脚本漏洞,它允许我在该应用程序的每个实例上执行JavaScript代码,因此我能够从用户的照片库中窃取所有照片,并将它们发送到我的服务器。本机代码通过postMessage API调用。

本机代码:

JavaScript代码:

我粘贴的代码示例当然不是精心设计的,因为它允许加载任何文件或任何联系人。在编写桥接代码时,请确保你的方法尽可能有限。因此,即使攻击者以某种方式向你的WebView注入代码,攻击面也会很紧。因此,不要公开过多的方法,严格验证参数并限制它们(在这种情况下,你可以从函数目录中指定的ID加载文件,而不是从路径加载文件)。另外,为了防止跨站点脚本漏洞,还应考虑实现内容安全策略机制。尽管它只是一个额外的安全层,但它可以通过阻止XSS漏洞来阻止攻击者。

在本地应用程序中使用WebViews可以促进开发,因为相同的HTML/CSS/JS代码可以在应用程序支持的所有平台上使用。这种技术确实很方便,但也有新的风险。在本文中,我想向你展示苹果环境中的2个API。旧的UIWebView被认为是不安全的,不应该再使用。WKWebView是实现webview的正确API。不幸的是,即使使用现代API也可能导致漏洞。开发人员必须确保他们的代码不容易受到与web相关的攻击和本机攻击。本文介绍了如何实现安全的webview以及如何限制攻击面。

参考及来源:https://www.securing.pl/en/secure-implementation-of-webview-in-ios-applications/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
卡佩罗谈大罗离开皇马:他每天都开派对,还鼓励大家和他一起玩

卡佩罗谈大罗离开皇马:他每天都开派对,还鼓励大家和他一起玩

直播吧
2024-06-20 00:08:06
新婚一个月,丈夫始终拒绝同房,妻子跟踪却发现惊天秘密……

新婚一个月,丈夫始终拒绝同房,妻子跟踪却发现惊天秘密……

极品小牛肉
2024-03-04 11:28:45
搞事?下一期《歌手》收视率要爆?导演组邀请了那英最不想见的人

搞事?下一期《歌手》收视率要爆?导演组邀请了那英最不想见的人

八卦王者
2024-06-20 15:29:36
中美正面硬刚!3艘055大驱迎战2艘美国航母,鹰击-21堪称航母杀手

中美正面硬刚!3艘055大驱迎战2艘美国航母,鹰击-21堪称航母杀手

战域笔墨
2024-06-17 19:41:38
突然暴雷,抛售10万亿!央行刚抛375亿,日本银行接力做空美债?

突然暴雷,抛售10万亿!央行刚抛375亿,日本银行接力做空美债?

财说得明白
2024-06-20 19:02:10
嫦娥六号成功登月,NASA专家:等美开建月球基地,中国或已建50年

嫦娥六号成功登月,NASA专家:等美开建月球基地,中国或已建50年

吾天
2024-06-21 02:05:33
1991年,中国总理奔赴远东招募苏联专家,从白俄罗斯淘回镇国神器

1991年,中国总理奔赴远东招募苏联专家,从白俄罗斯淘回镇国神器

干史人
2024-05-10 19:25:03
社会正在批量生产文盲和精神病!

社会正在批量生产文盲和精神病!

读史
2024-06-18 07:00:46
一辈子都被贵人保佑的 4 个生肖,寿命高享福不尽,心态还超好,日子过得神仙都羡慕 !

一辈子都被贵人保佑的 4 个生肖,寿命高享福不尽,心态还超好,日子过得神仙都羡慕 !

老六师傅
2024-06-20 22:10:24
【2024.6.20】贾静雯立场?墨雨云间播出效果?霍建华新戏?郭碧婷和苗苗关系?段奕宏在圈内咖位?

【2024.6.20】贾静雯立场?墨雨云间播出效果?霍建华新戏?郭碧婷和苗苗关系?段奕宏在圈内咖位?

娱乐真爆姐
2024-06-20 23:35:54
记者:路易斯、特谢拉、朱辰杰等7名球员没随申花出征佛山

记者:路易斯、特谢拉、朱辰杰等7名球员没随申花出征佛山

懂球帝
2024-06-20 22:11:09
上海市委书记、上海警备区党委第一书记陈吉宁简历

上海市委书记、上海警备区党委第一书记陈吉宁简历

探秘桂北
2024-05-03 00:11:57
18岁苏瑞·克鲁斯首次公开男友!共赴毕业舞会,情侣考入不同名校

18岁苏瑞·克鲁斯首次公开男友!共赴毕业舞会,情侣考入不同名校

译言
2024-06-20 09:40:56
人民日报:以为是养生,实际最耗气血的十大“好习惯”,有一个都可能摧毁健康!

人民日报:以为是养生,实际最耗气血的十大“好习惯”,有一个都可能摧毁健康!

每周文摘
2024-05-11 10:59:33
丈夫经常出差,61岁的邻居老汉,给了我做女人从未有过的幸福

丈夫经常出差,61岁的邻居老汉,给了我做女人从未有过的幸福

娱乐洞察点点
2024-06-19 23:15:33
“女魔头”金与正:手段狠辣让朝鲜恐惧,能左右哥哥金正恩的想法

“女魔头”金与正:手段狠辣让朝鲜恐惧,能左右哥哥金正恩的想法

洞鉴历史
2024-01-26 15:20:21
财政破产,亡国之兆

财政破产,亡国之兆

求实处
2024-05-10 23:05:43
收割亚洲失败,日本大举抛美债,万亿美债无人敢接,耶伦紧急警告

收割亚洲失败,日本大举抛美债,万亿美债无人敢接,耶伦紧急警告

前沿天地
2024-06-20 19:54:03
38岁博尔特现状:与1米55女友生了3孩子,每年领400万美元至终身

38岁博尔特现状:与1米55女友生了3孩子,每年领400万美元至终身

十点街球体育
2024-06-17 17:25:31
姚明打了8个赛季NBA,一共拿到9802分,那他5年CBA生涯拿了多少分

姚明打了8个赛季NBA,一共拿到9802分,那他5年CBA生涯拿了多少分

兵哥篮球故事
2024-06-20 00:35:02
2024-06-21 04:02:44
嘶吼RoarTalk
嘶吼RoarTalk
不一样的互联网安全新视界
7439文章数 10509关注度
往期回顾 全部

科技要闻

小米SU7流量泼天,富贵却被蔚来接住了

头条要闻

欧洲杯:凯恩破门 英格兰1-1丹麦

头条要闻

欧洲杯:凯恩破门 英格兰1-1丹麦

体育要闻

千夫所指的关系户 成了拯救葡萄牙的英雄

娱乐要闻

叶舒华参加柯震东生日聚会,五毒俱全

财经要闻

楼市新“王炸”!释放何信号?

汽车要闻

售价11.79-14.39万元 新一代哈弗H6正式上市

态度原创

游戏
旅游
数码
亲子
健康

魔兽世界怀旧服即将开服,正式服何时开放?官方早已透露玄机!

旅游要闻

铁路儿童票新规 已有超4900万小旅客免费出行

数码要闻

AMD 发布 ROCm 6.1.3,支持 RX 7900 GRE 显卡及 TensorFlow

亲子要闻

夫妻俩趁孩子睡着后聊聊一天的琐事,这就是向往的婚姻吧?

晚餐不吃or吃七分饱,哪种更减肥?

无障碍浏览 进入关怀版