JxBrowser:(为什么)我可以(不)使用缓存目录的 URI 路径?

JxBrowser: (why) can I (not) use URI path for cache directories?

我刚刚评价过JxBrowser。我想到了以下问题: 我可以通过像 encFs4J 这样的自定义 FileSystemProvider 将 Java URI 用于 "reroute" 来自底层 Chromium 引擎的所有临时文件吗?

我想要这样做的原因是为了遵守数据隐私法。由于 Web 应用程序无法强制浏览器清除其缓存或以安全方式存储任何临时文件,因此我认为我可以使用 JxBrowser 来实现这一点。如果我可以自己处理所有文件,我可以做一些加密魔术,这样(几乎)除了我的应用程序之外没有人可以访问数据。

有一个 API 可以通过 BrowserContextParams 定义目录。 但是,只允许绝对路径。不接受 URI。

而不是做

BrowserContext context = new BrowserContext(new BrowserContextParams("C:\Chromium\Data"));
Browser browser1 = new Browser(context);

我想做类似的事情

BrowserContext context = new BrowserContext(new BrowserContextParams(new URI("enc+file:///C:/Chromium/Data"));
Browser browser1 = new Browser(context);

有谁知道一种方法可以利用像 JxBrowser 这样的进程的文件处理例程?我能以某种方式添加此功能吗?

我考虑过为此使用 VeraCrypt 之类的东西。但这在可用性方面并不好,因为您必须安装虚拟硬盘驱动器驱动程序。对于一个相当简单的问题来说,这太过分了。

JxBrowser 中的底层 Chromium 引擎不使用 Java IO API 来访问文件。传递给 Chromium 引擎的数据目录只有一个路径字符串,它自己决定如何处理所有 IO 操作。

Chromium 中有一种模式称为隐身模式。在该模式下,所有文件,包括 cookie、缓存、历史记录都存储在内存中,没有任何内容存储在硬盘上,因此一旦您关闭应用程序,所有数据将自动清除。如果这符合您的要求,我们可以研究如何在 JxBrowser 中启用隐身模式。

我将接受 Artem 对原问题的回答。隐身/私人浏览器会话 - 只要它们不在硬盘上存储任何内容 - 将是一个完美而简单的解决方案。


此外,我想分享一下我对这个话题的研究。以下答案与 JxBrowser 无关,但与任何不支持 URI 路径或需要额外保护(临时)文件的第 3 方应用程序和库有关。

选项 1:RamDisk

  • 需要:ram 磁盘的内核模式驱动程序
  • 权限:admin一次(安装驱动)
  • 可用性:如果应用程序可以通过代码处理 ram 磁盘(未研究),则可能是无用的

正在安装可以 "catch" 文件的 RamdDisk。如果 ram 磁盘只在应用程序 运行 期间存在,它已经被自动清理了。 (未研究可行性) 使用自己的 ram 磁盘实现,可以执行其他步骤。

选项 2:虚拟文件系统,例如VeraCrypt

  • 需要:VeraCrypt,内核模式驱动程序
  • 权限:admin一次(安装驱动)
  • 可用性:用户必须在使用应用程序之前手动安装容器

由于可用性问题,未对此进行进一步研究。

选项 3:具有本地共享的嵌入式 SMB 服务器

  • 需要:SMB 服务器实施(例如 Java 的 JVLAN),创建服务器并在代码中共享
  • 权限:用户(Linux等下可以使用1445端口)
  • 可用性:对用户来说毫无意义,但对于一个简单的问题来说却是一个相当复杂的解决方案

步骤:通过代码启动SMB服务器,添加共享和用户身份验证(可选),将共享挂载到本地驱动器(windows)或挂载点(linux),使用访问本地挂载共享上的文件的绝对路径。如果应用程序崩溃,则用于 "real" SMB 服务器文件加密的易失性/内存中密钥将丢失,文件不会被其他人看到。

这个选项还有更多的潜力,比如一旦文件被读取就清除文件、控制对第三方应用程序的访问以及更多 - 甚至更奇怪的 - 想法。