Wordpress 什么';这是保存和处理插件密码的最佳做法/安全方法';s选项页?

Wordpress 什么';这是保存和处理插件密码的最佳做法/安全方法';s选项页?,wordpress,api,security,plugins,passwords,Wordpress,Api,Security,Plugins,Passwords,首先,我不是一个安全专家,也不熟悉表单验证、密码存储和wp插件开发。我看过的任何wp插件教程都没有关于API密码的章节。谷歌搜索wordpress密码问题并没有得到任何令人满意的结果。这就是我在这里问的原因 我想创建一个自定义Wordpress插件,它与另一个页面的Soap API一起工作。要使用Soap API,需要登录。因此Wordpress内置函数add_option(),update_option()和get_option()都使用纯文本 但我知道在wp_config文件中可以保存身份验

首先,我不是一个安全专家,也不熟悉表单验证、密码存储和wp插件开发。我看过的任何wp插件教程都没有关于API密码的章节。谷歌搜索wordpress密码问题并没有得到任何令人满意的结果。这就是我在这里问的原因

我想创建一个自定义Wordpress插件,它与另一个页面的Soap API一起工作。要使用Soap API,需要登录。因此Wordpress内置函数
add_option()
update_option()
get_option()
都使用纯文本

但我知道在wp_config文件中可以保存身份验证密钥。但是如何在选项页表单中使用它们来加密密码呢?如果用户再次访问该页面,是否可以将其存储在数据库中,解密并在后端使用,但不在选项页面上显示。因此,密码字段中只有一些黑点(与通行证中的字符数量不同),并且密码选项仅在写入该字段时更新

通常代码如下所示:

register_setting( 'my_plugins_option', 'my_options', 'my_validation_function' );

$options = array(
    'user' = > 'name',
    'password' = > 'pass',
    //... other options
) 
update_option( 'my_plugins_option', $options );
function my_validation_function($input){
    if($input['password']=='•••••'){
        //use the default value of the database if nothing was changed
        $old_options=get_option('my_plugins_option');
        $input['password']=some_decrypting_function($old_options['password']);
    }
    else{
        //use the password sent from the form
        $password=esc_sql(some_encrypting_function($input['password']));            
    }
    // ... validate the other inputs
    update_option( 'my_plugins_soap_api_pass', $password );
}
但我怎样才能让这更安全呢?我看过很多插件的例子,但是没有关于存储密码的。我在找这样的东西:

register_setting( 'my_plugins_option', 'my_options', 'my_validation_function' );

$options = array(
    'user' = > 'name',
    'password' = > 'pass',
    //... other options
) 
update_option( 'my_plugins_option', $options );
function my_validation_function($input){
    if($input['password']=='•••••'){
        //use the default value of the database if nothing was changed
        $old_options=get_option('my_plugins_option');
        $input['password']=some_decrypting_function($old_options['password']);
    }
    else{
        //use the password sent from the form
        $password=esc_sql(some_encrypting_function($input['password']));            
    }
    // ... validate the other inputs
    update_option( 'my_plugins_soap_api_pass', $password );
}
注:这段代码当然还没有经过测试,因为我不知道如何在wordpress插件中使用密码,所以我想先询问一下最佳实践


另一个问题是:如果上面代码的修改版本可以工作,并且密码保存一次,并且不再加载到仪表板前端(只显示以下内容:“••••••”一旦输入),是否可以保存以使用get_option()函数,解密密码并在后端使用它?

以下是一些建议。它们并不特定于WP,但可以应用

1) 在选项表中保存加密的密码(使用您想要的任何加密功能,只是不要编写自己的密码)

2) 在选项页面中,只需不输出密码即可。将该字段留空,如果数据库中已经存储了密码,则不需要输入该字段

3) 仅在代码中实际需要密码之前解密从选项表检索到的密码