当前位置: 首页>>技术解读>>正文


如何在wordpress选项DB中存储API的用户名和密码?

webfans 技术解读 , , , , 去评论

问题描述

我目前正在开发一个插件,很有可能我很可能会在公共插件库中发布它,以便其他人可以使用它。

该插件将使用API​​并使用此API您需要传递用户名和密码。所以我的插件需要将这些登录凭据存储在数据库中。我不想将它们以纯文本形式存储,尽管API需要它们以纯文本形式存在。

所以我的问题是如何存储这些敏感的信息? Hashing已经出局,因此它必须是某种加密方式。

在WordPress中是否有一个可以使用的独特密钥,从博客到博客不同?我应该用什么PHP函数来加密和解密?我正在寻找可能适用于所有WP安装的功能。

最佳解决方法

虽然我同意之前的回答,但为了回答你实际问过的问题,我想到的是为wp-config.php使用以下常量之一:


define('AUTH_KEY',        'redacted');
define('SECURE_AUTH_KEY', 'redacted');
define('LOGGED_IN_KEY',   'redacted');
define('NONCE_KEY',       'redacted');

它们在wordpress安装中是独一无二的 – 并且是在wordpress中找到pre-existing键的唯一选项。替代方法是添加您自己的类似常量,该常量是通过对管理员电子邮件地址或类似方法散列其中一个来构建的 – 然后将其存储在隐藏设置选项中 – 以防止丢失您的密钥,如果有人意外修改了您的密钥后插件已安装。危险的是,如果它们在初始安装时没有独特,但管理员/站点所有者决定在事后纠正失败,他们不应该意外破坏您的密码加密。

至于加密/解密功能 – 快速谷歌搜索返回以下列表,其中包含符合条件的代码:http://maxvergelli.wordpress.com/2010/02/17/easy-to-use-and-strong-encryption-decryption-php-functions/


function encrypt($input_string, $key){
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $h_key = hash('sha256', $key, TRUE);
    return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $h_key, $input_string, MCRYPT_MODE_ECB, $iv));
}

function decrypt($encrypted_input_string, $key){
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $h_key = hash('sha256', $key, TRUE);
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $h_key, base64_decode($encrypted_input_string), MCRYPT_MODE_ECB, $iv));
}

以下是此处使用的AES加密的一些文档:http://www.chilkatsoft.com/p/php_aes.asp

次佳解决方法

这正是OAuth的设计环境。

来自OAuth homepage

For Service Provider developers…

If you’re supporting…

  • web applications
  • server-side APIs
  • mashups

If you’re storing protected data on your users’ behalf, they shouldn’t be spreading their passwords around the web to get access to it. Use OAuth to give your users access to their data while protecting their account credentials.

OAuth的优点是您不需要存储用户的密码。当他们第一次设置插件时,他们会被要求通过应用程序使用用户名和密码登录(通常是与API在同一服务器上托管并在页面重定向,厚箱或iframe中加载的页面) 。

用户登录后,服务器(您的系统)会创建一个安全密钥,其系统(WordPress)可以使用该密钥与API进行交互。此密钥对于用户帐户和站点是唯一的 – 它为应用程序(在WordPress上)提供了代表用户使用API​​执行操作的权限,而不是每次都传递其身份验证信息。

如果您想查看此操作的示例,请查看Jetpack

当您激活插件时,它会抱怨它没有连接。当您”connect”时,您可以通过WordPress.com输入您的凭据并设置WordPress与其API之间的OAuth交互。

但您只需执行此操作一次,您的WordPress.com用户名/密码永远不会存储在本地WordPress数据库中。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/3028.html,转载请务必附带本地址声明。