问题描述
希望在其设备上对特定的应用和原生应用进行网络访问限制,尤其是要对某些预设的URL开放访问权限。同时将任何非白名单中的URL阻止被浏览器或任何聊天窗口所使用。因为设备已被root,因此有办法确保所有应用程序能够遵守这些规则。
然而,用户通过重写WebViewClient来覆盖shouldOverrideUrlLoading
方法虽然可以在一定程度上实现对特定应用的请求过滤,但对于未调用WebViewClient的应用程序(比如直接使用系统API的应用),这种方法则完全无效。此时需要一个通用解决方案,并且该方案能够在所有应用程序和浏览器中被访问。
解决方案
通过自定义中间人代理服务器来拦截并检查URL
对于想要监控和控制设备上所有应用的网络通信,可以探索使用虚拟私人网(VPN)解决方案,这种技术与PC上的Mitmproxy类似。这种方法允许在设备上安装一个自定义根证书作为系统CA认证,并解密出站的TLS流量。通过这种方式,可以检查URL是否是白名单中的内容,从而决定了请求的继续或中断。
实现步骤
- 安装支持中间人代理的功能模块
可以参考此链接,并按指南安装自定义根CA证书。
配置拦截器来验证出站流量中的URL是否来自于白名单,若是则放行该请求,否则中断。
需要注意的是,在某些情况下,应用程序可能使用了证书锁定(certificate pinning)技术,在这种情况下,上述方案将不起作用。所以测试时需要考虑这一点,以确保希望被访问的应用符合白名单要求。
域名过滤的简化解决方案
如果只需要对特定域名进行白名单控制而不需要详细检查每个URL,则可以选择使用Blokada等应用程序来进行过滤。
– 安装并配置这些提供域名过滤服务的应用程序能够轻松实现无需深入网络请求层,从而避免了复杂的CA证书安装过程。
总的来说,如果需要深层次的控制与监控每一个应用的行为,则建议通过自定义中间人方法解决。如果只是希望对一些特定域名进行粗略的白名单管理,则Blokada等应用程序可以简化问题并提供有效的解决方案。