大数跨境
0
0

wordpress函数wp_nonce_url

wordpress函数wp_nonce_url wordpress知识
2025-10-25
7

wp_nonce_url函数用于生成带一次性验证令牌(nonce)的 url,主要用于验证通过url发起的请求(如链接点击、GET 方式的操作)的合法性,防止跨站请求伪造(CSRF攻击)。

当你需要通过url执行敏感操作(如删除数据、更新设置、提交参数等)时,直接暴露url可能被恶意利用(例如黑客伪造链接诱导用户点击,执行非预期操作)。wp_nonce_url() 会在url中附加一个随机生成的nonce令牌,确保该请求是用户在你的网站上主动发起的,而非第三方伪造。

wp_nonce_url($actionurl$action$name);
  • $actionurl(字符串,必填):需要附加nonce的原始url(如操作链接、处理脚本地址)

  • $action(字符串/整数,可选):nonce绑定的 “操作名称”(用于区分不同场景,如 “delete_post”),默认值为 -1

  • $name(字符串,可选):url中nonce参数的名称(即 query 键名),默认值为 _wpnonce

// 原始操作 URL(假设通过 admin-post.php 处理删除)$original_url admin_url('admin-post.php?action=delete_my_post&id=123');// 生成带 nonce 的 URL(操作名称为 "delete_post_123",绑定具体文章 ID 更安全)$secure_url wp_nonce_url(  $original_url  'delete_post_123', // 操作名称(建议包含唯一标识,如 ID)  'post_delete_nonce' // nonce 参数名(可选,默认 _wpnonce));// 输出链接echo '<a href="' . esc_url($secure_url) . '" onclick="return confirm(\'确定删除?\')">删除文章</a>';

生成的 URL 类似:

https://yourdomain.com/wp-admin/admin-post.php?action=delete_my_post&id=123&post_delete_nonce=5f8d5a5b5c

其中 post_delete_nonce=5f8d5a5b5c 就是附加的 nonce 令牌

生成带 nonce 的 URL 后,必须在处理请求的后端逻辑中验证 nonce 有效性,否则无法发挥安全作用

// 在 functions.php 中注册处理函数(通过 admin-post.php 接收请求)add_action('admin_post_delete_my_post''handle_post_deletion'); // 登录用户add_action('admin_post_nopriv_delete_my_post''handle_post_deletion'); // 非登录用户(根据需求选择)function handle_post_deletion() {  // 1. 检查 nonce 参数是否存在  if (!isset($_GET['post_delete_nonce'])) {    wp_die('安全验证失败:未找到验证令牌');  }  // 2. 验证 nonce 有效性(参数:URL 中的 nonce 值、对应的 $action 名称)  $nonce_valid wp_verify_nonce($_GET['post_delete_nonce'], 'delete_post_123');  if (!$nonce_valid) {    wp_die('安全验证失败:无效的令牌');  }  // 3. 验证通过后,执行删除逻辑(示例)  $post_id intval($_GET['id']);  if (wp_delete_post($post_id)) {    wp_redirect(admin_url('edit.php?message=deleted')); // 跳转成功页  } else {    wp_die('删除失败');  }  exit;}

【声明】内容源于网络
0
0
wordpress知识
各类跨境出海行业相关资讯
内容 266
粉丝 0
wordpress知识 各类跨境出海行业相关资讯
总阅读1.5k
粉丝0
内容266