对UPDATE_OPTION变量应用函数

时间:2014-10-10 作者:MikeiLL

我找到了一些关于加密插件选项字段的说明here, 使用:

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));
以及here, 推荐WP的便携式PHP密码哈希框架:

require_once( \'/path/to/wp-includes/class-phpass.php\' );
$wp_hasher = new PasswordHash( 8, TRUE );
$password = \'swordfish\';
$hashed_password = $wp_hasher->HashPassword( $password );
但我遇到了问题,因为我想在表单字段中显示解密后的密码(如果设置了),但不知道如何在发送到DB之前对其进行加密。

当前代码如下:

// Register and define the settings
add_action(\'admin_init\', \'my_plugin_admin_init\');

function my_plugin_admin_init(){
    register_setting(
        \'my_plugin_options\',
        \'my_plugin_options\',
        \'my_plugin_validate_options\'
    );

    add_settings_section(
        \'my_plugin_main\',
        \'The Credentials\',
        \'my_plugin_section_text\',
        \'my_plugin\'
    );

// Display and fill the form field
function my_plugin_password() {
    $options = get_option( \'my_plugin_options\',__(\'Option Not Set\') );
    if (isset($options[\'my_plugin_password\'])) {
        $my_plugin_password = decrypt($options, $options[\'my_plugin_password\'], SECURE_AUTH_SALT);
        $my_plugin_password_enc = encrypt($my_plugin_password, SECURE_AUTH_SALT);
    } else {
        $my_plugin_password = _e(\'YOUR PASSWORD\');
        $my_plugin_password_enc = \'\';
    }
    // echo the field
    echo "<input id=\'my_plugin_password\' name=\'my_plugin_options[my_plugin_password]\' type=\'text\' value=\'$my_plugin_password_enc\' />";
}


add_settings_field(
            \'my_password\',
            \'Enter Password: \',
            \'my_password\',
            \'my_plugin\',
            \'my_plugin_main\'
        ); 
我想现在发生的是,一个未加密的密码被解密成这样的东西:@H!��f46vQa��,�五、��3.�1.��(Ȥ��

“加密的”一个看起来就像输入字符串,后面跟着As

是否需要添加update_option 打个电话吧?

还想知道使用JavaScript进行加密和解密是否更安全,这样只有加密的字符串离开客户端。但我不确定当用户从另一个客户端登录时,这将如何工作。

2 个回复
最合适的回答,由SO网友:Otto 整理而成

没有安全的方法来加密同样可逆的密码。哈希函数(例如用于密码的哈希函数)的全部要点是它是单向的。

你可以加密它,而不是解密它。

如果密码是可解密的,那么您最好先不要加密。对数据库中的密码进行加密的目的是,如果有人获得了对数据库的读取权限,他们就无法发现你的密码是什么。他们所看到的只是散列随机性。因为它是不可逆的,所以他们自己无法解密它。

你说你需要在数据库中以加密的形式存储信息,但你没有说你为什么需要这样做。你要防范的具体威胁或攻击类型是什么?每种类型的攻击都有相应的对策,你不仅要加密,因为加密神奇地让事情变得更安全,你还要以特定的方式加密,以缓解特定的威胁。

如果您正在与某个服务通信,那么最好使用OAuth2或类似的工具,让这两个服务在不使用密码的情况下进行连接。

在高层寻找更好的解决方案。如果您正在加密密码,然后还需要解密密码,那么首先您可能在最初的概念上就大错特错了。

SO网友:Angrist

您可以使用操作和筛选器在选项到达数据库之前拦截正在保存的选项。

https://codex.wordpress.org/Plugin_API/Filter_Reference/pre_update_option_(option_name)

结束

相关推荐

Encryption of Wordpress Posts

我一直在寻找一个完全私有的Wordpress博客,并在这一过程中找到了有用的博客/教程,如David Hewsons pretty detailed walkthrough.我目前有一个很好的私有系统(在线),需要登录凭据才能访问博客,现在问题就出在这里。我担心,如果我的web服务器遭到某种方式的黑客攻击(我不会不知道这可能会发生),并且我的数据库被访问,那么我的所有帖子都会被查看,从而破坏所有前端的隐私工作。我一直在寻找预构建的解决方案来加密帖子本身,但目前还不存在任何解决方案,我需要的是在编写Word