我正在使用Nonce概念来防止CSRF。我正在使用 wp_create_nonce()创建随机数,并使用 wp_verify_nonce()验证创建的随机数。我已经使用 $。ajaxSetup()将现时数据添加为所有ajax请求的标头。
这是代码
创建随机数:
global $whl_nonce_value;
$whl_nonce_value = wp_create_nonce( 'whl_site_create_nonce' );
使用$ .ajaxsetup()将随机数添加到所有ajax请求中:
var nonce = "<?php global $whl_nonce_value; echo $whl_nonce_value; ?>";
$.ajaxSetup({
beforeSend: function (xhr){
xhr.setRequestHeader("whl_nonce",nonce);
}
});
验证随机数令牌:
function sample_function(){
$headers = apache_request_headers();
if(wp_verify_nonce($headers["whl_nonce"],'whl_site_create_nonce')){
//code
}
else{
wp_send_json_error(array("Security Error"),403);
die();
}
}
面临的问题是,标头值正在缓存。因此,给定403错误,随机数令牌值未正确验证。 我需要确保每个ajax请求附带的标头值都不会被缓存,以便在验证时正确匹配。