当前位置:首页>WordPress建站>WordPress开发>WordPress Nonce:它是什么、它是如何工作的以及如何创建它

WordPress Nonce:它是什么、它是如何工作的以及如何创建它

在密码学中,nonce 指的是“使用一次的数字”,并生成用于保护表单和 URL 免受恶意黑客攻击。它通常由随机字母和数字组成,默认寿命为一天,用作某些操作和输入的身份验证工具。

WordPress是采用此安全功能的众多平台之一,尽管对其进行了一些修改。无论您是希望提高平台安全性的网站所有者,还是希望保护您的插件免受恶意用户侵害的 WordPress 开发人员,本文都将帮助您更好地理解 nonce。

下面,我们就来探索 WordPress nonce 的优势以及如何在WordPress 网站上创建和验证 nonce 。

什么是 WordPress 中的 Nonce

WordPress nonce 是一个“使用一次”的安全令牌,用于保护 URL 和表单免受恶意攻击。它帮助 WordPress 确定请求是否有效,防止未经授权的操作和输入。也称之为“随机数验证”。

为什么使用 WordPress Nonce

WordPress nonces 保护平台免受各种恶意攻击,特别是跨站点请求伪造 (CSRF)。这种网络攻击利用 WordPress 安全漏洞诱骗用户提交不需要的请求,从更改用户的登录详细信息到删除用户帐户。

以下是用户想要删除帖子时由 WordPress 生成的 URL 示例。

http://yourwebsite.com/wp-admin/post.php?post=123&action=trash

如果您执行此 URL,WordPress 将检查其身份验证 cookie 以验证“123”帖子的删除请求。

问题是 CSRF 攻击很容易将此请求链接伪装成其他东西。当用户单击它时,浏览器将附加身份验证 cookie 并使其看起来像一个有效请求。结果,WordPress 站点将执行恶意 HTTP 请求,从而危及站点的内容。

Nonce 通过向 URL 添加额外的保护层来防止 CSRF 攻击。下面是一个由 WordPress 网站生成的带有 nonce 验证的 URL 示例。

http://yourwebsite.com/wp-admin/post.php?post=123&action=trash&_wpnonce=b192fc4204

如果您尝试在没有 WordPress 生成正确 nonce 的情况下访问该 URL,您将看到403 Forbidden以及“您确定要这样做吗?” 错误信息。

请记住,与真正的随机数不同,WordPress nonce 随机数可以多次使用,只要它们仍然有效。WordPress nonces 也是专门为每个会话生成的,这意味着一旦用户登录或退出页面,它们的值将不再有效。

如何在 WordPress 中创建 Nonce

在 WordPress 中创建 nonces 需要将代码添加到functions.php文件中。您可以使用主机或服务器面板的文件管理器编辑文件,或者使用FileZilla 等FTP 客户端,甚至 File ManagerFilester 等在线文章编辑插件进行修改。

要为 URL 创建 nonce,请调用wp_nonce_url()函数。在括号内指定基本 URL 和表示 nonce 操作的字符串。这是删除用户帐户的随机数示例。

$nonce = wp_nonce_url($bare_url, 'delete-user_'.$user->ID);

您可以通过调用wp_nonce_field()函数向表单添加随机数,同时指定其用户操作的字符串。该函数默认创建两个隐藏字段——第一个隐藏字段包含 nonce 值,而第二个隐藏字段包含当前 URL。这是删除评论的随机数示例。

$nonce= wp_nonce_field('delete-comment_'.$comment_id);

要在其他上下文中添加 nonce,请使用wp_create_nonce()函数。与前面的函数一样,不要忘记指定表示特定操作的字符串。

$nonce = wp_create_nonce('my-action_'.$post->ID );

nonce 的默认生命周期是 24 小时。使用nonce_life过滤器以秒为单位修改 nonce 生命周期。

$nonce_life = apply_filters('nonce_life', DAY_IN_SECONDS);

如何在 WordPress 中验证 Nonce

您可以要求 WordPress 检查嵌入在 URL、表单、AJAX 请求或其他上下文中的 nonce。如果检查失败,WordPress 将终止脚本执行并返回 403 Forbidden 响应。

使用check_admin_referer()函数来验证从管理屏幕中的表单传递的随机数。指定 nonce 字段名称以获得最大保护,特别是如果您不使用默认的_wpnonce字段名称。

这是一个验证删除评论请求的随机数的快速示例。

check_admin_referer( 'delete-comment_'.$comment_id );

要验证 AJAX 请求中传递的 nonce,请调用check_ajax_referer()函数并指定表示操作的字符串。

check_ajax_referer( 'process-comment' );

要在另一个上下文中调用 nonce 检查,请使用wp_verify_nonce()函数并指定用户操作的字符串。

wp_verify_nonce( $_REQUEST['my_nonce'], 'process-comment'.$comment_id );

注意:出于安全原因,切勿与其他用户共享 nonce。请记住,只要它们仍然有效,WordPress 随机数就可以多次用于身份验证和授权。

总结

WordPress nonces 保护网站免受恶意用户试图执行未经授权的用户操作。简而言之,nonce 通过将查询字符串嵌入到管理屏幕中的 URL 和表单来工作,确保请求有效并且来自合法用户。总之,Nonce 可能有助于保护 WordPress 网站免受 CSRF 攻击。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
欢迎关注WordPress大学公众号 WPDAXUE
WordPress开发商城相关

如何动态获取 WooCommerce 购物车、结帐、商店页面网址?

2022-9-24 9:31:47

WordPress开发WordPress资讯

WordPress 6.1 引入了填充、边距和块间隙的预设值

2022-10-9 10:10:50

2 条回复 A文章作者 M管理员
  1. user26237

    function.php在哪里?

    • 倡萌

      通常来说,每个主题都会有一个 function.php 文件,就在你启用的那个主题的根文件夹,比如 wp-content/themes/你的主题文件夹/function.php

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索