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

如何在Java中防止Servlet应用在移动浏览器被远程访问与录屏?

解决方案:阻止第三方远程控制软件访问移动浏览器及Servlet Web应用

一、移动浏览器端限制方案

移动浏览器受系统及厂商权限限制,无法直接复用原生App的FLAG_SECURE逻辑,但可通过以下方式降低风险:

1. 利用浏览器API检测录屏行为

针对支持MediaRecorder或getDisplayMediaAPI的浏览器,可监听录屏权限请求,触发敏感内容隐藏逻辑:

navigator.mediaDevices.getDisplayMedia({ video: true })
  .then(stream => {
    // 检测到录屏启动,隐藏敏感内容
    document.querySelectorAll('.sensitive-content').forEach(el => {
      el.style.display = 'none';
    });
    stream.getTracks().forEach(track => track.stop());
  })
  .catch(err => {
    // 用户拒绝录屏,正常展示内容
  });

注意:该方式仅能检测主动发起的录屏请求,无法拦截系统级强制录屏。

2. 混合应用WebView强化配置

如果是通过原生WebView加载网页,可将WebView与Activity的安全标记绑定,间接实现防录屏:

WebView webView = findViewById(R.id.webview);
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
// 复用已实现的FLAG_SECURE配置
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

此配置会让WebView内容跟随Activity的安全策略,被系统阻止录屏及远程控制。

3. 远程控制服务检测+内容动态模糊

在混合应用的原生层检测远程控制服务运行状态,通知Web端模糊敏感内容:

// 检测远程控制服务是否活跃
private boolean checkRemoteControlRunning() {
    ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningServiceInfo> services = am.getRunningServices(Integer.MAX_VALUE);
    for (ActivityManager.RunningServiceInfo service : services) {
        String serviceName = service.service.getClassName();
        if (serviceName.contains("anydesk") || serviceName.contains("teamviewer") 
            || serviceName.contains("quicksupport")) {
            return true;
        }
    }
    return false;
}

// 通知WebView执行模糊操作
if (checkRemoteControlRunning()) {
    webView.evaluateJavascript("blurSensitiveContent()", null);
}

对应的Web端JS逻辑:

function blurSensitiveContent() {
    document.querySelectorAll('.sensitive').forEach(el => {
        el.style.filter = 'blur(10px)';
        el.setAttribute('title', '当前存在远程控制风险,内容已隐藏');
    });
}

二、Servlet Web应用端防护策略

服务器端无法直接干预客户端录屏,但可通过以下方式增强安全:

1. 设备特征拦截

在Servlet中检测请求的User-Agent,拦截含远程控制软件标识的请求:

String userAgent = request.getHeader("User-Agent");
if (userAgent != null && (userAgent.contains("AnyDesk") || userAgent.contains("TeamViewer"))) {
    response.sendRedirect("/security-warning.html");
    return;
}

2. 敏感操作二次验证

对转账、密码修改等核心操作,增加一次性验证码(短信/邮件)或调用混合应用的原生生物识别能力,避免录屏信息被复用。

3. 动态水印威慑

给敏感内容叠加含用户唯一标识的水印,即使被录屏也可追溯泄露来源:

.sensitive-content::after {
    content: '用户ID: ${userId} | 会话ID: ${sessionId}';
    position: absolute;
    top: 0;
    left: 0;
    color: rgba(0,0,0,0.15);
    pointer-events: none;
    z-index: 9999;
    transform: rotate(-15deg);
}

三、局限性说明

  • 移动浏览器的系统级录屏拦截无通用方案,受限于浏览器权限边界,只能做风险缓解而非彻底阻止。
  • 所有检测手段无法100%拦截专业远程控制工具,核心防护仍需依赖系统安全策略及用户操作规范。

内容的提问来源于stack exchange,提问作者abinaya ramasamy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:30:11