今天来讲讲手机app截图安全性问题
IOS 截图是系统层级因此安全问题不大,但还是需要适时提醒使用者
在Android 上可就要小心了,若是下载到恶意 App 也可以使用者截图盗走
因此在包含个人资讯,付款资讯上的页面就要慎重的处理
我们在 Day 07. 资安检测 (II) 4.1.2 安全敏感性资料保护
里面有一点 4.1.2.3.9 行动应用程序画面撷取警示
其中行动应用程序於非使用者主动进行的画面撷取时应主动警示使用者
主要针对 Android 系统,系统被背景命令触发时发动的截图
但在Android 系统命令触发时,App内并无手段可以侦测 adb shell screencap
adb shell screencap - p /sdcard/Download/1.png
上行程序码为在debug模式并执行程序码, 若可以正常被截图,此项目就会视为不符合
由於这条很靠北特别,只能在有帐密个资等全部页面加上 FLAG_SECURE
,才能通过检验『Android 禁止截图』
iOS 需做到截图时通知使用者『iOS截图侦测』即可通过此项目
侦测 userDidTakeScreenshotNotification
let mainQueue = OperationQueue.main
NotificationCenter.default.addObserver(forName: UIApplication.userDidTakeScreenshotNotification, object: nil, queue: mainQueue) { notification in
print("撷取图片")
}
iOS 无法做到,禁止截图,只能通知使用者萤幕已经截图
由於 Android 不像iOS 有系统级的方法可以侦测
因此只能土炮自行侦测,目前有两种方式侦测截图,另外一种是侦测键,但是因为厂商太多每支手机都不同因此可靠度太低
利用FileObserver监听某个目录中资源变化情况
利用ContentObserver监听全部资源的变化
这边说明用 FileObserver 为例
权限设定
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
程序码
public class ScreenshotActivity extends AppCompatActivity {
private final String TAG = "Screenshot";
private static final String PATH = Environment.getExternalStorageDirectory() File.separator
Environment.DIRECTORY_PICTURES File.separator "Screenshots" File.separator;
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screenshot);
mFileObserver = new CustomFileObserver(PATH);
}
@Override
protected void onResume() {
super.onResume();
mFileObserver.startWatching();
Log.d(TAG, PATH);
}
@Override
protected void onStop() {
super.onStop();
mFileObserver.stopWatching();
}
/**
* 目录监听器
*/
private class CustomFileObserver extends FileObserver {
private String mPath;
public CustomFileObserver(String path) {
super(path);
this.mPath = path;
}
public CustomFileObserver(String path, int mask) {
super(path, mask);
this.mPath = path;
}
@Override
public void onEvent(int event, String path) {
Log.d(TAG, path " " event);
// 监听到事件,做一些过滤去重处理操作
}
}
}
FLAG_SECURE
Android 官方文件说明
FLAG_SECURE 是 WindowManager.LayoutParams 的一个属性
它标记当前 window 是安全的,不允许有一些非安全的操作,例如截图功能。
FLAG_SECURE flag 设定後会有以下功能:
阻止萤幕截图
在Recent apps(任务切换介面)中只显示应用名字和图示, 不显示内容
Google App的Now on tap功能不会去分析你的页面的内容
程序码
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
或
window.addFlags(WindowManager.LayoutParams.FLAG_SECURE);
https://developer.android.com/reference/android/view/WindowManager.LayoutParams
https://medium.com/swlh/how-to-make-your-ios-app-secure-from-screen-shot-and-recording-82b6aea26b33
https://www.itread01.com/fxefy.html
>>: [Re:PixiJS - Day44] pixi-particles 粒子效果 2/2:实作应用
从七月开始从零开始研究PySide2 GUI相关设计及程序如何撰写,已经有一段时间了,笔者深深有感,...
-图片来源:Toussaint Ilboudo 我碰到了有关卢克小组中的暴力攻击事件的帖子,并恭敬...
延续昨日 今天从我的专案开始 老样子先新增一个project.vue 再来去加入新的path 然後先...
摘要 浅谈Learning Rate 1.1 简介 1.2 示意图 Learning Rate的策略...
元件介绍 Modal 元件为弹出相关元件提供了重要的基础建设,如 Dialog、Popover、Dr...