首页 > 解决方案 > 无法使用可读格式的 JavaScript 读取 IndexedDB sqlite 文件

问题描述

这是我从本地托管网站的 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(file); 获得了它。

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

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

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

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

编辑

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

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

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

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

标签: javascriptsqliteencodingblob

解决方案


您需要参考:- SQLite 数据库文件格式

初始数据来自标头(前 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 数据库的标题如下所示:-

在此处输入图像描述

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

在此处输入图像描述

因此,文件可能以某种方式损坏。


推荐阅读