在密码学中,nonce 指的是“使用一次的数字”,并生成用于保护表单和 URL 免受恶意黑客攻击。它通常由随机字母和数字组成,默认寿命为一天,用作某些操作和输入的身份验证工具。
WordPress是采用此安全功能的众多平台之一,尽管对其进行了一些修改。无论您是希望提高平台安全性的网站所有者,还是希望保护您的插件免受恶意用户侵害的 WordPress 开发人员,本文都将帮助您更好地理解 nonce。
下面,我们就来探索 WordPress nonce 的优势以及如何在WordPress 网站上创建和验证 nonce 。
什么是 WordPress 中的 Nonce
WordPress nonce 是一个“使用一次”的安全令牌,用于保护 URL 和表单免受恶意攻击。它帮助 WordPress 确定请求是否有效,防止未经授权的操作和输入。也称之为“随机数验证”。
为什么使用 WordPress Nonce
WordPress nonces 保护平台免受各种恶意攻击,特别是跨站点请求伪造 (CSRF)。这种网络攻击利用 WordPress 安全漏洞诱骗用户提交不需要的请求,从更改用户的登录详细信息到删除用户帐户。
以下是用户想要删除帖子时由 WordPress 生成的 URL 示例。
如果您执行此 URL,WordPress 将检查其身份验证 cookie 以验证“123”帖子的删除请求。
问题是 CSRF 攻击很容易将此请求链接伪装成其他东西。当用户单击它时,浏览器将附加身份验证 cookie 并使其看起来像一个有效请求。结果,WordPress 站点将执行恶意 HTTP 请求,从而危及站点的内容。
Nonce 通过向 URL 添加额外的保护层来防止 CSRF 攻击。下面是一个由 WordPress 网站生成的带有 nonce 验证的 URL 示例。
如果您尝试在没有 WordPress 生成正确 nonce 的情况下访问该 URL,您将看到403 Forbidden以及“您确定要这样做吗?” 错误信息。
请记住,与真正的随机数不同,WordPress nonce 随机数可以多次使用,只要它们仍然有效。WordPress nonces 也是专门为每个会话生成的,这意味着一旦用户登录或退出页面,它们的值将不再有效。
如何在 WordPress 中创建 Nonce
在 WordPress 中创建 nonces 需要将代码添加到functions.php文件中。您可以使用主机或服务器面板的文件管理器编辑文件,或者使用FileZilla 等FTP 客户端,甚至 File Manager 或 Filester 等在线文章编辑插件进行修改。
要为 URL 创建 nonce,请调用wp_nonce_url()
函数。在括号内指定基本 URL 和表示 nonce 操作的字符串。这是删除用户帐户的随机数示例。
您可以通过调用wp_nonce_field()
函数向表单添加随机数,同时指定其用户操作的字符串。该函数默认创建两个隐藏字段——第一个隐藏字段包含 nonce 值,而第二个隐藏字段包含当前 URL。这是删除评论的随机数示例。
要在其他上下文中添加 nonce,请使用wp_create_nonce()
函数。与前面的函数一样,不要忘记指定表示特定操作的字符串。
nonce 的默认生命周期是 24 小时。使用nonce_life
过滤器以秒为单位修改 nonce 生命周期。
如何在 WordPress 中验证 Nonce
您可以要求 WordPress 检查嵌入在 URL、表单、AJAX 请求或其他上下文中的 nonce。如果检查失败,WordPress 将终止脚本执行并返回 403 Forbidden 响应。
使用check_admin_referer()
函数来验证从管理屏幕中的表单传递的随机数。指定 nonce 字段名称以获得最大保护,特别是如果您不使用默认的_wpnonce
字段名称。
这是一个验证删除评论请求的随机数的快速示例。
要验证 AJAX 请求中传递的 nonce,请调用check_ajax_referer()
函数并指定表示操作的字符串。
要在另一个上下文中调用 nonce 检查,请使用wp_verify_nonce()
函数并指定用户操作的字符串。
注意:出于安全原因,切勿与其他用户共享 nonce。请记住,只要它们仍然有效,WordPress 随机数就可以多次用于身份验证和授权。
总结
WordPress nonces 保护网站免受恶意用户试图执行未经授权的用户操作。简而言之,nonce 通过将查询字符串嵌入到管理屏幕中的 URL 和表单来工作,确保请求有效并且来自合法用户。总之,Nonce 可能有助于保护 WordPress 网站免受 CSRF 攻击。