无法成功验证随机数

时间:2017-11-18 作者:Prdufresne

我正在开发一个插件(这是第一次),我正试图负起责任,在我的Ajax调用中包含一个nonce。我看了十几本教程,都有不同的方法,我想我已经找到了答案,但我无法让它验证nonce。我是否在这个过程中遗漏了一个步骤?

我应该注意到,如果我注释掉check\\u ajax\\u referer,那么其他一切都可以工作,因此函数、javascript对象和其他一切似乎都是正确的。

首先,我生成nonce并将其存储在Javascript对象中:

    $fmsapi_ajax_params = array (
        \'ajaxurl\' => admin_url(\'admin-ajax.php\'),
        \'ajax-nonce\' => wp_create_nonce(\'fmsapi_refresh_nonce\'),
    );

    wp_register_script("fmsapi_refresh_script", plugins_url(\'fmsapi_refresh_hybrid_schedule.js\', __FILE__), array(\'jquery\'));
    wp_localize_script(\'fmsapi_refresh_script\', \'fmsapi_Ajax\', $fmsapi_ajax_params);
接下来,在Javascript中,我在通过Ajax调用传递的数据中包含nonce:

jQuery(document).ready(function ($) {

    var data = {
        \'action\': \'fmsapi_refresh_hybrid_schedule\',
        \'year\': year,
        \'event\': event,
        \'team\': team,
        \'type\': type,
        \'security\': fmsapi_Ajax.ajax_nonce,
    };

    jQuery.post(fmsapi_Ajax.ajaxurl, data, function (response, status) {
        document.getElementById("frc_hybrid_table").innerHTML = response;
    });
});
最后,在PHP中,我尝试检查nonce:

$security = filter_input(INPUT_POST, \'security\');

check_ajax_referer(\'fmsapi_refresh_nonce\', $security);

// Populate the table with the parameters provided
echo frc_populate_hybrid_schedule($year, $event, $team, $type);
为了简洁起见,我删掉了一些与nonce无关的代码,但根据我的研究,这应该是可行的。

Firefox中的Inspect控制台没有标记任何Javascript错误,我运行的BlackBox插件不会返回任何PHP错误。在创建和检查之间,有一个问题,我似乎找不到。

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

查看documentation, 的第二个参数check_ajax_referer() 是:

(false | string)(可选)键,用于检查$\\u请求中的nonce(自2.5起)。如果为false,将为“\\u ajax\\u nonce”和“\\u wpnance”(按该顺序)计算$\\u请求值。

而不是值本身。因此,正确的用法是:

check_ajax_referer(\'fmsapi_refresh_nonce\', \'security\' );

结束

相关推荐

Admin-由于$_请求为空,AJAX响应为0

我强烈反对用延迟加载内容来更新现有的客户端站点。目前,问题似乎在管理ajax中。php文件,其中脚本在if ( empty( $_REQUEST[\'action\'] ) ) die( \'0\' ); 控制台中的错误:GEThttp://www.example.com/wp-admin/admin-ajax.php?lang=en&action=example_frontpage_feed&page=0&next_time=0 net::ERR\\u EM