You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android API33剪贴板敏感数据:如何避免分享及跨应用时暴露?

Android API 33 剪贴板敏感数据全场景隐藏方案

在Android API 33中,仅设置ClipDescription.EXTRA_IS_SENSITIVE只能实现剪贴板工具栏的内容隐藏,但无法阻止通过分享或其他应用读取敏感数据。以下是几种可行的全场景隐藏方案:

1. 启用受限剪贴板访问(官方推荐)

API 33新增的ClipDescription.FLAG_RESTRICTED标记,可配合EXTRA_IS_SENSITIVE实现严格的跨应用访问限制。设置后,其他应用无法读取该剪贴项,系统剪贴板的分享按钮会被禁用,软键盘顶部也不会展示敏感内容。

代码实现:

ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
// 创建剪贴数据
ClipData clip = ClipData.newPlainText("敏感数据", "your_actual_sensitive_content");

// 设置敏感标记
PersistableBundle extras = new PersistableBundle();
extras.putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true);
clip.getDescription().setExtras(extras);

// 添加受限访问标记
clip.getDescription().setFlags(ClipDescription.FLAG_RESTRICTED);

// 写入剪贴板
clipboard.setPrimaryClip(clip);

2. 实现应用内部剪贴机制(最高安全性)

如果敏感数据仅需在应用内部流转,可完全绕过系统剪贴板,自定义内部剪贴逻辑:

// 全局剪贴板管理类(单例或静态实现)
public class InternalClipboard {
    private static String cachedSensitiveData;

    // 复制敏感数据到内部缓存
    public static void copySensitiveData(String content) {
        cachedSensitiveData = content;
    }

    // 从内部缓存获取敏感数据(可添加权限校验)
    public static String getSensitiveData() {
        // 示例:仅允许本应用进程访问
        if (Process.myUid() == android.os.Process.myUid()) {
            return cachedSensitiveData;
        }
        return null;
    }
}

使用时,将系统复制操作替换为调用InternalClipboard.copySensitiveData(),粘贴时调用getSensitiveData()即可,完全避免系统剪贴板的泄露风险。

3. 占位符替换(兼容性折中方案)

若必须依赖系统剪贴板,可临时用占位符替代真实敏感数据,仅在本应用内部粘贴时恢复:

  • 复制时:将剪贴板内容设为***敏感内容***这类占位符,同时在应用内部缓存真实数据。
  • 粘贴时:在应用的粘贴事件拦截中,将占位符替换为缓存的真实数据;其他应用只能获取到占位符。

这种方案无法彻底阻止其他应用读取剪贴板,但能大幅降低敏感数据暴露的概率。


内容的提问来源于stack exchange,提问作者Oleh Romanenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:07:26