SQLite、SQLCipher、PHP 和 PowerShell 注意事项

SQLite, SQLCipher, PHP and PowerShell considerations

所以我正在为我们的内部网制作这个很棒的网络应用程序,我想使用 SQLite。为了增加安全性,我认为使用 Zetetic SQLCipher 会很棒,它可以使数据库文件加密并且不可读,以防有人窃取它。 我知道如何将它与 PHP PDO 一起使用,但问题是最新版本只有 PHP 7.1 才 2 岁,我不确定是否会有更多的开发 https://github.com/kynetiv/php_pdo_sqlcipher 我没有找到任何其他 PHP PDO 库,但也许我忽略了一些东西。

接下来是 PowerShell,它是我的应用程序的自动化和数据收集所必需的。在这里,我在想我是否应该通过 PHP 处理的临时 CSV 文件写入 SQLite,或者我是否应该通过 PSSQLite 从 PowerShell 直接访问 SQLite ...但是,PowerShell 中似乎没有支持 SQLCipher 的模块,所以我将不得不放弃加密。 想法?

我们有一个伟大的 sibling site 致力于安全,他们要求每个人在处理安全问题时首先要考虑的事情之一是攻击向量是什么以及您试图减轻什么风险。 如果你已经这样做了,我很抱歉,你可以忽略它

然而,我之所以这样说,是因为一体式解决方案往往会给人一种错误的安全感。例如,如果您认为您的数据库很可能 and/or 可能在物理上遭到破坏,那怎么说他们也不会拿走包含密码的文件?也有 ways to mitigate 个问题,但它们也会导致其他 problems/complexities。

我说这一切刚刚建立了一个使用数据库加密的应用程序,所以它是最重要的。对于我们的应用程序,我们将 Doctrine 用作 ORM,并根据需要使用 this 来加密列。我们的应用程序是使用 Symfony 构建的,这可能不适合您,但它大大简化了事情,包括您的 PowerShell 问题(稍后会详细介绍)。

回到您的问题,该存储库似乎是 Windows 的唯一二进制文件,除非您愿意自己构建它,否则我建议您避免使用它。 PHP 7.1 已停产,PHP 8 将在今年第四季度推出。有 alternatives,但它们都需要许可证或自行构建。因此,除非您愿意 因此,我认为 SqlCipher 不适合您

对于您的自动化,我再一次强调使用 Symfony Console 应用程序是多么美妙。只需几行代码,您就可以拥有一个 CLI,如果您愿意,可以将其编译成一个 PHAR,以便只有一个可执行文件。我们有很多内部工具可以这样做。

如果您不想走 Symfony(或其他框架)路线,您仍然可以使用一堆参数调用 PHP 脚本。先写入 CSV 文件好还是直接调用好?两者都是绝对有效的选项,因此它实际上取决于您的用例和数据集。对我来说,如果我的 PHP 代码可以读取文件而不是进行 API 调用或从 stdin 或类似的读取,那么调试起来就容易多了。因此,如果您的 PowerShell 代码可以执行任何逻辑,然后使用“处理此文件”调用 PHP,从我的角度来看,这通常是最好的。但是,如果您更擅长 PowerShell,那么那里的处理可能会更好。老实说,这真的取决于。

编辑

我只是想添加更多有关应用程序级别加密的内容。加密数据的一个缺点是它通常不可搜索,至少使用数据库本身是这样。有办法解决这个问题,但是:

此外,如果不需要从数据库中搜索,而您只是想要一个地方来存储让您的​​应用程序处理解密的东西,PHP 通过 Sodium 库有一些非常棒且易于使用的加密.不幸的是缺少官方文档,但以下内容可以很好地揭开神秘面纱: