【问题标题】:What's the best practice/ a secure way for saving and processing a password of a plugin's option page?保存和处理插件选项页面密码的最佳做法/安全方法是什么?
【发布时间】:2014-09-10 10:45:53
【问题描述】:

首先,我不是安全专家,也不熟悉表单验证、密码存储和 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 );
}

P.S.:这个代码当然还没有经过测试,因为我不知道如何在 wordpress 插件中使用密码,所以我想先询问最佳实践。

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

【问题讨论】:

    标签: wordpress api security plugins passwords


    【解决方案1】:

    这里有几个建议。它们并非特定于 WP,但可以应用。

    1)在选项表中保存一个加密密码(使用你想要的任何加密函数,只是不要自己写)

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-23
      • 2014-09-12
      • 2013-01-18
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多