使用随机数通过AJAX保存自定义数据

时间:2012-11-03 作者:Marvin3

我正试图通过ajax将自定义数据从插件后端安全地保存到数据库。

单击“保存”按钮后运行的JavaScript代码:

$.ajax({
    url: ajaxVars.ajaxurl,
    type: \'post\',
    data: {
        action : \'myPluginDataSave\',
        someData: \'blabla\',
        myPluginNonce : ajaxVars.nonce
    },
    complete: function(data) {          
        console.log(\'finish\',data.responseText);
    }
});
PHP代码(某些部分缺失),ajax\\u save\\u data函数从JS代码接收数据:

add_action( \'wp_ajax_myPluginDataSave\', array(&$this, \'ajax_save_data\') );
wp_enqueue_script( \'my-plugn-js\' );
wp_localize_script( \'my-plugn-js\', \'ajaxVars\', array(
                    \'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
                    \'nonce\' => wp_create_nonce( \'myPluginNonce\' ),                          
)); 

function ajax_save_data() {
    if ( !isset($_POST[\'myPluginNonce\']) || !wp_verify_nonce( $_POST[\'myPluginNonce\'], \'myPluginNonce\' ) ) 
        die ( \'you cant do this\' ); 

    echo \'here data gets saved to DB\' . $_POST[\'someData\'];

    die();
}
挂钩仅在admin(内部)中添加is_admin() if语句)。可以多次单击“保存”按钮(无需刷新页面)。

代码有效。但是,我的问题是:这样做正确吗?我需要暂时在那里吗?

谢谢你的建议。

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

我没有看到任何is_admin 条件语句,这就是为什么您应该将其包含在代码片段中,以便我们能够正确评估您在明显问题之外试图做什么。

无论哪种方式,nonce都应该是强制性的。接收和处理AJAX请求/响应的函数还应验证nonce,以确保请求是有效和安全的请求-即使请求来自后端,也可能是不安全的或试图利用系统进行攻击。

另请看:

结束

相关推荐

Forms and WordPress Nonce

WordPress nonce快把我逼疯了!当我启动插件并删除它时,我遇到了这个问题,但现在我又回来了,仍然不知道该怎么办。我到处寻找解决办法。我的代码与其他示例相同/相似。我得到一个“未定义索引‘mrlpt\\u client\\u check’”错误。在基于用户功能检查权限时,我也会遇到与“mrlpt\\U客户端”相同的错误,但这是我创建的自定义帖子类型,所以我不确定为什么这也不起作用?这是nonce元素所在的代码。include只是在一个自定义元框中包含一个简短的表单,其中有两个输入字段,一个用于电