无法使用可读格式的 JavaScript 读取 IndexedDB sqlite 文件

Posted

技术标签:

【中文标题】无法使用可读格式的 JavaScript 读取 IndexedDB sqlite 文件【英文标题】:Can not read IndexedDB sqlite file with JavaScript in readable format 【发布时间】:2021-09-28 15:47:17 【问题描述】:

这是我从本地托管网站的IndexedDB存储sqlite文件中获得的一些内容。 (从 Mozilla Firefox 获得)

SQLite format 3@  �.O| �;��  [�������- 3�triggerfile_update_triggerfileCREATE TRIGGER file_update_trigger AFTER UPDATE ON file FOR EACH ROW WHEN NEW..
..
��tabledatabasedatabaseCREATE TABLE database( name TEXT PRIMARY KEY, origin TEXT NOT NULL, version INTEGER NOT NULL DEFAULT 0, last_vacuum_time INTEGER NOT NULL DEFAULT 0, last_analyze_time INTEGER NOT NULL DEFAULT 0, last_vacuum_size INTEGER NOT NULL DEFAULT 0) WITHOUT ROWID ��'- reduxhttp://localhostƸ&~ʘ�    

我是用 javascript 函数获取的 reader.readAsText(文件);

因为是取证分析用的,所以不能用常规的 IndexedDB 函数获取。同源政策不允许我。这个来自本地主机,但其他一些网站也有同样的问题。

如果我将它读为 reader.readAsArrayBuffer 它会给我这个: [object ArrayBuffer] 作为输出

右键单击 + 检查 + 存储 + 索引数据库很好地显示了它,但我不能总是通过同源策略再次使用它。

我尝试了所有编码,但无法将其转换为正确的显示。一些字符表示为?并在其他一些编码中作为框。例如 http://localhost 在末尾有一些错误表示的字符。 有什么方法可以让我以可读的形式获得它?

编辑

在 Firefox 和 Chrome 的开发者工具中显示数据没有任何问题。我还可以通过这个开发者工具访问我自己网站的数据。我还可以使用此处所述的 IndexedDB 代码访问它https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API

这些数据存储在 C:\Users\AppData\Roaming\Mozilla\Firefox\Profiles\storage\default\ 下的 .sqlite 文件中

我的问题是,当这些数据是通过逻辑提取从某人的计算机外部获取时,我需要解析这些数据。我尝试制作自己的网站并交换 .sqlite 文件以显示数据。它没有工作

https://i.stack.imgur.com/JuFGT.png

【问题讨论】:

【参考方案1】:

您需要参考:-SQLite Database File Format。

初始数据来自标头(前 100 个字节)为 SQLite 格式 3. 是 >0 16 The header string: "SQLite format 3\000"

您需要使用 SQLite 来阅读它(例如,SQLite 工具,例如 Navicat for SQLite、DBeaver、DB Browser ....)或做很多工作来编写自己的阅读器。

但是,从您显示的内容来看,标题似乎不够长。看起来标头只有 46 个字节而不是 100 个字节。您不会在标头中得到 triggerfile_update

也许可以在支持十六进制的编辑器中查看它,例如NotePad++ 有一个十六进制编辑器插件。使用它,示例 SQLite 数据库的标题如下所示:-

直到很久以后,架构的数据(表的定义等)才出现:-

所以可能是文件损坏了。

【讨论】:

我试过 DB Browser 和其他一些工具,都没有这些字符。 DB Browser 将其显示为二进制,但不可读的字符被转换为 '...' 仍然不可读。例如,'username' 字符串显示为 'use..?rname',而它出现在开发人员工具中。 感谢您的调查。对此,我真的非常感激。我对问题进行了编辑。

以上是关于无法使用可读格式的 JavaScript 读取 IndexedDB sqlite 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将 sqlite 文件中的 blob 数据读取为可读格式?

javascript Vue.js过滤将DateTime字符串格式化为可读/自定义格式

MAGNOLIA CMS - 使用 cmsu:simpleSearch 和 cmsu:searchResultSnippet 链接无法正确显示并且无法将日期转换为可读格式

第三章——供机器读取的数据

第三章——供机器读取的数据(XML)

用c 语言编写程序时,应该特别注意格式,否则会影响可读性对吗?