Skip to content

安全

虽然 NativePHP 尽量使你的应用程序安全变得尽可能简单,但保护用户是你的责任。

密钥和 .env

由于你的应用程序被安装在你/你的组织控制之外的系统上,重要的是要将它所处的环境视为_潜在的_敌对环境,也就是说任何密钥、密码或密钥可能落入可能试图滥用它们的人手中。

这意味着你应该尽可能为每次安装使用唯一的密钥,最好在首次运行或每次运行时生成这些密钥,而不是在许多安装中为每个用户共享相同的密钥。

特别是如果你的应用程序通过网络与任何私有 API 通信,我们强烈建议你的应用程序和任何 API 使用强大且安全的身份验证协议,如 OAuth2,它使你能够创建和分发具有高熵的唯一且会过期的令牌(建议过期日期在未来不超过 48 小时),因为这使它们难以猜测和滥用。

始终使用 HTTPS。

如果你的应用程序允许用户连接_他们自己的_服务 API 密钥,你应该非常小心地处理这些密钥。如果你选择将它们存储在任何地方(无论是文件还是数据库),请确保将它们加密存储,并仅在需要时解密。

安全存储

NativePHP 通过 SecureStorage facade 提供对用户设备原生 Keystore/Keychain 的访问,允许你以安全的方式存储少量数据。

设备的安全存储即时加密和解密数据,这意味着你可以安全地依赖它来存储 API 令牌等关键内容,保护你的用户和系统安全。

这些数据只能由你的应用访问,并且在应用生命周期之后仍然保留,因此下次打开应用时仍然可用。

注意

安全存储仅用于少量文本数据,通常不超过几 KB。如果你需要存储更大量的数据或文件,你应该将其存储在数据库或作为文件。

何时使用 Laravel Crypt facade

当用户首次打开你的应用时,NativePHP 会为他们的设备生成一个唯一的 APP_KEY并将其存储在设备的安全存储中。这意味着你的应用程序的每个实例都有自己的加密密钥,安全地存储在设备上。

NativePHP 安全地从安全存储中读取 APP_KEY 并使其对 Laravel 可用。因此你可以安全地使用 Crypt facade 来加密和解密数据!

注意

确保你不要通过错误跟踪或调试日志工具无意中泄露 APP_KEY 或解密的数据。

这非常适合加密不容易放入安全存储的较大量数据。你可以加密值并将它们存储在文件系统或 SQLite 数据库中,知道它们在静态时是安全的:

php
use Illuminate\Support\Facades\Crypt;

$encryptedContents = Crypt::encryptString(
    $request->file('super_private_file')
);

Storage::put('my_secure_file', $encryptedContents);

然后稍后解密:

php
$decryptedContents = Crypt::decryptString(
    Storage::get('my_secure_file')
);

重要

使用 Crypt facade 加密的数据应该与你的应用一起保留在用户设备上。将其加密放在其他任何地方都有无法恢复的风险。如果用户丢失设备或删除你的应用,他们将丢失加密密钥,数据将永远被加密。

如果你希望共享数据,请先解密,安全传输(例如通过 HTTPS),然后使用在其他地方安全管理的不同密钥重新加密。

基于 NativePHP 官方文档翻译