原文:mp.weixin.qq.com/s/AMwfENQCn…
背景
在移动互联网应用中,信息安全与数据保护已成为核心命题。近年来国内真实且有公开报道的重大数据泄露 / 违规使用事件数不胜数,例如:
- 某游戏公司员工在测试阶段,私自录制未公开的游戏画面并分享至社交媒体,导致内容提前泄露。该员工因此因违反保密协议而被公司解雇并面临法律追责
- 金融机构员工违规截图客户个人信息并通过微信等渠道外泄,此举不仅导致涉事员工被立即开除,还致使所在机构面临监管部门的高额罚款
大参林企业内部APP往往承载了商品价格、财务数据、供货信息等核心敏感数据。这些数据不仅是企业运营的命脉,更是其竞争优势的关键所在。一旦泄露,可能会对企业造成严重影响。因此,我们需在不影响用户体验的前提下,平衡业务需求与技术防护,构建一个完整的安全防护闭环。
业界对标
众所周知泄密手段通常是用户在屏幕上通过截图、录屏或相机二次拍摄获取,从而泄露敏感信息。想要了解防泄密手段,不妨看看业界的防泄密手段都有哪些:
- 微信:在收款码页面中进行截图,微信会在敏感视图中增加蒙层视图提示,起到一定的警示作用。
- 企业微信:在会话聊天页面增加水印进行数据防泄漏操作,从而根据水印进行溯源。
- 京东金融:在账号登录页面中,当截屏操作时得到的是黑色页面,让用户无法通过截图获取。
通过对三款主流APP的调研,我们发现其防止数据泄露的手段大体可以归纳为三类:提示防护(告知型)、水印防护(震慑型)以及防截屏录屏(技术型)。在大参林企业内部APP的实践过程中,并未局限于单一的技术路径,而是从业务与技术两个维度协同发力,形成双重防护策略。
业务防护
业务防护的核心目标是“教育与约束并重”,通过可感知的交互与策略,降低风险事件的发生 ,下面列出较为典型常用的手段:
- 友情提示(提醒型防护)
- 阈值警告(风险策略型)
- 限制使用(强制型防护)
友情提示(提醒型防护)
弹窗、吐司提醒是一种较为常用的警示手段,该场景常用于页面尽管存在敏感信息,但仍然允许用户截屏/录屏,意在提醒用户截屏/录屏可能会泄露敏感信息。
实现机制为监听系统通知(截屏/录屏事件)后,弹出提示或 toast(如图),其优点在于低成本、不干扰业务;缺点在于提醒易被忽略,无法真正阻止泄露。
阈值警告(风控策略型)
该场景常用于企业风控策略调节,部分功能(如财务报表、销售业绩等)门店需要截图上报、汇总,此时允许用户进行限定次数的截屏/录屏,一旦达到风险阈值就会进行对应的控制:弹窗(如图)、禁用、冻结等
阈值策略设计思路也比较简单,通过远程配置下发阈值(如 5 分钟内截屏/录屏超过 3 次),触发上报与限制,流程图(如图)
该方式灵活度较高,配合业务或风控决策,动态配置阈值,支持不同风险等级下发不同动作,后续亦可结合上报数据与冻结策略构建“行为画像”,利用AI自动调整策略。
限制使用(强制防护型)
限制使用是一种更为简单、粗暴的手段,当用户在敏感信息页面(如销售业绩、商品清货价等页面)发生截屏/录屏动作或者是达到风险阈值次数时,直接锁死/冻结功能,无法使用该功能,更有激进做法是冻结账号(如图)。后续可通过解冻、人工审核等流程进行,恢复功能的使用。
这种强制型防护最强,可以杜绝继续操作,但缺点也比较明显:用户体验下降,易被误认为系统异常。
业务防护手段多种多样,本文仅列举了三个较为典型的场景:友情提示、阈值警告、功能限制。具体采用哪种方式,需要结合实际业务场景谨慎选择,避免因过度干预而损害用户体验。
更为合理的做法是采渐进式限制:先通过“友情提醒”传递风险意识,在用户行为频繁或严重时再升级为“阈值警告”,最后才进入“功能限制”。这种循序渐进的策略既能发挥防护作用,又能最大限度地兼顾用户体验,避免“一刀切”的粗暴处理方式。
技术防护
技术防护侧重于利用技术影响或者禁止用户截屏录屏获取途径,从而增加传播成本
禁止截屏/录屏
在 Android / Harmony 等平台存在系统级 API 可以直接禁止截屏/录屏,是保护极度敏感页面的有效手段。iOS 没有等效的公开 API,无法直接全面禁用截屏/录屏。
在 iOS 上常用的替代做法是利用 UITextField.secureTextEntry 特性:将敏感内容放在启用了 secureTextEntry = YES 的 UITextField(或借助其内部渲染层)中。开启后系统会把该区域当作密码处理——屏幕上显示掩码(如圆点),并在截屏/录屏或 QuickTime 投屏时对该区域做特殊处理,使其在截图中显示为空白或被掩盖。这是 iOS 提供的系统级保护,难以被绕过,因此在密码/高度敏感字段场景被广泛采用
基于该特性,可将敏感页面内容嵌入特定视图中,实现与输入框相同的防护效果。
实际起作用的是 _UITextLayoutCanvasView,将内容添加到该视图后,截屏或录屏时画面会变为空白。但由于该类是私有 API,无法直接使用,可通过创建启用 secureTextEntry 的 UITextField,再遍历其内部层级来获取实际生效的安全视图。
- (UIView *)makeSecureView {
UITextField *field = [[UITextField alloc] init];
field.secureTextEntry = YES;
UIView *secureView = field.subviews.firstObject;
for (UIView *sub in secureView.subviews) {
[sub removeFromSuperview];
}
secureView.userInteractionEnabled = YES;
return secureView;
}
该方案的效果与京东金融类似,截屏或录屏只会得到空白画面,可有效防止信息泄露。
为避免用户误以为是异常,京东金融会弹出提示,而大参林内部 App 则进一步优化,支持自定义防截屏/录屏页面,可在 _UITextLayoutCanvasView 前插入个性化内容进行展示
if (_screenView) {
// 外部传入自定义截图
[_screenView removeFromSuperview];
[super addSubview:_screenView];
_screenView.translatesAutoresizingMaskIntoConstraints = NO;
}
// 安全视图
[self addSubview:_secureView];
呈现的效果是用户截屏就会得到自定义的内容,且内容可以多元化,尽可能描述当前操作的风险,避免用户误解(如图)
显性水印
显性水印是一种可见的安全防护手段,通过在页面上叠加用户身份相关标识(如手机号、工号、设备号、时间戳等),使每一次截屏都带有「来源信息」,这种方式可有效震慑潜在的泄密行为,并在信息外传后实现快速溯源与责任定位。
适合展示敏感信息的页面,如订单、报表、价格、财务数据、内部沟通记录等。
显性水印方法的特点在于:通用性强、可定制性高、震慑效果明显,同时方案也需要注意以下事项:
-
避免影响阅读
- 建议水印透明度控制在 0.05~0.15。
- 使用斜向排列,减少和正文的干扰。
-
密度与性能
-
水印过密会影响性能,建议 2~3 行文字循环平铺。
-
用CALayer替代UILabel,减少内存占用。
-
-
内容多样性
-
不仅仅用手机号,可以混合「手机号 + 时间戳 + App 名称」。
-
让每次截屏的水印都唯一,增强溯源性。
-
-
防裁剪设计
- 在页面边缘也布满水印,避免用户通过裁剪轻松去除。
隐形水印
隐形水印则是利用肉眼难以察觉的低透明度文字,在正常使用中几乎不可见,但通过调整 曝光、对比度、饱和度、鲜明度 后会显现出来。
核心在于UI渲染层叠加一层极低透明度的用户身份信息,用户不可见,不打扰用户使用体验,截屏传播时,可通过调节图像参数识别水印来源。
根据APP的不同页面背景场景,可以根据颜色/alpha/偏移策略进行选择,最大程度保障贴合背景色
| 背景场景 | 推荐颜色 | Alpha 建议值 | 布局策略 | 显影测试效果 |
|---|---|---|---|---|
| 白底/浅色背景 | [UIColor colorWithWhite:0 alpha:0.02](浅黑灰) | 0.015 ~ 0.025 | 双层错位叠加,旋转差 5°,偏移 2px | 提升对比度时,文字在暗通道浮现 |
| 深色背景 | [UIColor colorWithWhite:1 alpha:0.02](接近白色) | 0.015 ~ 0.03 | 双层叠加,间距 1px,旋转差 8° | 提升曝光时,亮部通道可见 |
| 彩色图片/高饱和度背景 | [UIColor colorWithRed:0.01 green:0.02 blue:0.00 alpha:0.02](深绿偏色) | 0.02 ~ 0.03 | 随机 ±2px 偏移,tile 交错铺设 | 调高饱和度时,某些通道浮现 |
| 渐变/复杂图案背景 | 随机 R/G/B 偏移:0.02 ± 0.005 | 0.02 ~ 0.03 | 三层叠加:黑/蓝/绿,透明度差异 | 在不同通道下至少有一层能显影 |
实践后的效果(如下图),在页面没有任何水印遮挡,正常观看下不可见,通过调整截图的曝光、对比度、饱和度、鲜明度即可显现,不影响用户体验,隐秘性强,适合内部取证。
总结
在大参林企业内部APP的实践中,我们深刻认识到,移动端数据防泄漏不能依赖单一手段,而必须通过“业务需求 + 技术防护”的组合拳形成合力。
这种业务 + 技术协同的防护模式,不仅显著增加敏感数据泄露的成本,也实现了用户体验与合规性的平衡。同时也暴露出新的挑战:
-
行为层面:仍无法防止外设拍照或截图裁剪等间接泄漏;
-
技术层面:如何在跨端框架(如 uni-app、Flutter、H5)中统一实现防截屏与防录屏,仍需持续攻关
声明
- 以上内容如有侵权,请联系更正
- 转载请注明出处