现在我明白了!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多少次,我们的函数都不会响应他们。
对不起,我的英语不好,解释不好。只是想帮忙。如果我遗漏了什么或做错了什么,请告诉我。