如何在不在线公开的情况下将文件存储在 Wordpress 插件中?

Posted

技术标签:

【中文标题】如何在不在线公开的情况下将文件存储在 Wordpress 插件中?【英文标题】:How to store a file in a Wordpress Plugin without exposing it online? 【发布时间】:2021-04-20 18:28:39 【问题描述】:

我正在开发一个 Wordpress 插件,它通过 Google 服务帐户与 Google Calendar API 对话。

这样的服务帐户附带一个 JSON 文件,其中包含其 OAuth2 凭据(例如client_idpublic keyprivate key)。

为了使插件为其他人工作,我需要他们在插件中上传自己的 JSON 凭据文件。这样,插件将能够与 Google API 对话并访问/修改他们的个人日历。

事情是这样的:

Wordpress 插件文件没有保护,它们是公开的。如何在插件中存储 JSON 文件而不暴露其中包含的凭据?

“嘿伙计,你可以将 JSON 保存在数据库中……”

我知道,但 Google 的 API 客户端需要证书文件的字符串,而不是直接的 JSON:

$client = new Google\Client();
$client->setAuthConfig('./credentials.json');

【问题讨论】:

这能回答你的问题吗? deny direct access to a folder and file by htaccess 另外,它是否需要是 JSON 文件?您是否可以将这些参数存储在数据库中,作为单个字段或 JSON blob,并将其提供给您的代码? @disinfor 并非所有插件用户都会在 Apache 上托管他们的 Wordpress 站点,因此修改 .htaccess 不是这里的解决方案,但我感谢您的帮助! 【参考方案1】:

这似乎没有被谷歌很好地记录下来,但看起来setAuthConfig 也可以使用数组而不是字符串。因此,您应该能够允许用户将 JSON 存储在数据库中,然后自己 json_decode 并将其传递给 setAuthConfig

// retrieve $jsonString from database somehow
$configArray = json_decode($jsonString, true);
$client->setAuthConfig($configArray);

请注意,json_decode 需要将第二个参数设置为 true,以便将其解码为关联数组,这正是 Google 库想要的。

(如果你好奇,可以在这里查看setAuthConfig 代码:https://github.com/googleapis/google-api-php-client/blob/81696e6206322e38c643cfcc96c4494ccfef8a32/src/Client.php#L956 注意它如何检查$config 是一个字符串,如果不是,它就直接使用它。另外, 函数上面的注释提到 $config 可以是一个数组。)

【讨论】:

对于 OP,请这样做而不是写入文件系统。否则,如果你只有一个使用这个插件的客户端,你可能会没事,因为你可以控制文件系统。但并不是每个人都在 Apache 上托管,因此不能使用 htaccess 来阻止对事物的访问。 我自己没注意到,谢谢!将使用此解决方案。

以上是关于如何在不在线公开的情况下将文件存储在 Wordpress 插件中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不创建 IAM 用户的情况下将文件从 EKS 上传到 S3 存储桶?

如何在不使用共享首选项的情况下将数据存储为颤动的对象[关闭]

在不使用 spring-boot 执行器的情况下将来自 spring 应用程序的指标公开给 prometheus

如何在不使用任何付费工具的情况下将 dbf 文件导入 mysql?

如何在不实际创建数据库的情况下将在线可用数据库 API 中的数据提取到 firebase 数据库中? [关闭]

如何在不更改表架构的情况下将查询结果存储在当前表上?