在密码学中,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 Manager 或 Filester 等在线文章编辑插件进行修改。
要为 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 攻击。
function.php在哪里?
通常来说,每个主题都会有一个 function.php 文件,就在你启用的那个主题的根文件夹,比如 wp-content/themes/你的主题文件夹/function.php