为什么CHECK_AJAX_REFERER在HTTPS网站上会出现403错误?

时间:2021-01-11 作者:Vörös Imi

当我在没有SSL的站点上编写ajax函数时,请检查\\u ajax\\u referer是否按预期工作。但它失败了,在https站点上出现了403禁止的错误。我试了很多次,但我不知道为什么它不起作用。

我错过了什么?有什么想法吗?

表单(小部件类):

public function widget( $args, $instance ){
    $action = \'?action=registration\';
    $unique_string = "Unique string";
    $nonce = wp_create_nonce($unique_string);
        
    wp_localize_script(\'registration_script\', \'registration_ajax_object\',
        array(
            \'ajaxurl\' => admin_url(\'admin-ajax.php\') . $action,
            \'nonce\' => $nonce
        )
    );
    ?>
    ...form...
    <?php
}
主插件文件:

function ajax_registration(){
    check_ajax_referer(\'Unique string\', \'nonce\');
    ...
}
add_action(\'wp_ajax_registration\', \'ajax_registration\');
add_action(\'wp_ajax_nopriv_registration\', \'ajax_registration\');
JS文件:

let ajaxurl = registration_ajax_object.ajaxurl;
let nonce = registration_ajax_object.nonce;
$.ajax({
    type: \'post\',
    url: ajaxurl,
    data: {
        \'nonce\': nonce,
        ...
    }, ...
});

1 个回复
SO网友:honk31

在我看来这很好。但我也有同样的问题,这就是为什么我被你的问题绊倒了。

我在我的箱子里用

if (!wp_verify_nonce($_POST[\'nonce\'], \'nonce\')) {
    die(__(\'Security Check failed\', \'textdomain\'));
}
在我的ajax操作的一开始。不知道403版是从哪里来的,因为它可以在台式机上使用,但不能在我的手机上使用。奇怪的试试看,如果有帮助的话,让我知道。

我在您的代码中看到了另一件事,但不确定它是否会导致问题:一次使用单引号,另一次使用双倍引号。在这里尽量保持一致。

wp_verify_nonce()

相关推荐

未发送从PHP文件到AJAX的响应

我试图从Php脚本向Ajax发送一些响应,但没有发送。下面是我的代码。目前,我正在发送虚拟数据,稍后将进行更改。。Php脚本。。 $response = [\'Successfull callback\',\'ndnvnvnsobdboi\',\'ijjijbujbhu\']; echo json_encode($response); die(); Ajax脚本。。。jQuery(do