现在我明白了!WordPress真是太棒了。也谢谢你,你的建议对我很有帮助。我试图用我的话来解释它。如果我错了,请纠正我。
What is nonce?
Nonce类似于安全哈希,用于防止攻击和错误。它创建唯一标识符来检查ajax请求是否来自网站。在WordPress中
nonce是一个;“使用一次的编号”;帮助保护URL和表单免受某些类型的恶意或其他滥用。WordPress noncesaren不是数字,而是由数字和字母组成的散列。它们也不是只使用一次,而是有一个有限的;“寿命”;然后他们就开火了。
How to use it?
<首先,我们需要使用
wp_enqueue_script()
. 类似这样:
function wpdocs_theme_name_scripts() {
wp_enqueue_script( \'script-name\', get_stylesheet_directory_uri().
\'/js/ajxfile.js\', array(), \'1.0.0\', true );
}
add_action( \'wp_enqueue_scripts\', \'wpdocs_theme_name_scripts\' );
我们注册
ajxfile.js
文件名为
script-name
. 现在它已加载到wordpress的所有页面。
现在我们需要使用wp_localize_script()
为了声明变量,我们在函数中添加了nonce。
function wpdocs_theme_name_scripts() {
wp_enqueue_script( \'script-name\', get_stylesheet_directory_uri() .
\'/js/ajxfile.js\', array(), \'1.0.0\', true );
wp_localize_script(\'script-name\', \'ajax_var\', array(
\'url\' => admin_url(\'admin-ajax.php\'),
\'nonce\' => wp_create_nonce(\'ajax-nonce\')
));
}
我们成功注册并本地化了脚本。
确保在ajax调用中传递nonce数据ajxfile.js
:
/* global ajax_var */
$.ajax( {
url: ajax_var.url,
type: \'post\',
data: {
action: \'custom_script_name\',
nonce: ajax_var.nonce, // pass the nonce here
moredata: \'whatever\',
},
success( data ) {
if ( data ) {
// etc...
}
},
} );
现在我们想用脚本绑定函数。所以我用了这个
add_action(\'wp_ajax_nopriv_custom_script_name\', \'custom_php_ajax_function\');
add_action(\'wp_ajax_custom_script_name\', \'custom_php_ajax_function\');
我们正在使用
wp_ajax_nopriv_
&;
wp_ajax_
用wordpress挂钩绑定我们的函数。第二个钩子在用户登录时触发,第一个钩子在用户未登录时触发。
我们的功能是
function custom_php_ajax_function() {
// Check for nonce security
if ( ! wp_verify_nonce( $_POST[\'nonce\'], \'ajax-nonce\' ) ) {
die ( \'Busted!\');
}
}
我们的函数将检查是否正在发送ajax数据
nonce
使用其他参数隐藏数据。如果没有,那么它将触发一个错误。这确实有助于防止ajax攻击。
Nonce
数据是隐藏值,必须与其他参数一起发送。
How to check if it is working or not?
<移除
\'nonce\' => wp_create_nonce(\'ajax-nonce\')
从…起
wpdocs_theme_name_scripts()
然后单击链接。它将显示错误现在从我们的功能中删除安全检查并单击链接。它会起作用的这表明,如果没有nonce数据,我们对nonce进行安全检查的功能将永远无法工作。它是隐藏的,所以没有其他人可以使用它。如果没有人知道,那么无论他们运行ajax多少次,我们的函数都不会响应他们。
对不起,我的英语不好,解释不好。只是想帮忙。如果我遗漏了什么或做错了什么,请告诉我。