WordPress Nonce——它是什么如何工作以及如何创建它
在密码学中,Nonce指的是一个 "只用一次的数字",用来保护表单和URL免受恶意的黑客攻击。它一般由随机的字母和数字组成,默认寿命为一天,作为某些行动和输入的认证工具。
WordPress是许多采用这种安全功能的平台之一,尽管对它进行了一些修改。无论你是一个希望提高平台安全性的网站所有者,还是一个希望保护你的插件不被恶意用户攻击的WordPress开发者,这篇文章将帮助你更好地理解nonce。
继续阅读,我们将探讨WordPress Nonce的优势以及如何在WordPress网站上创建和验证Nonce。
什么是WordPress的Nonce?
WordPress的Nonce是一个 "只用一次的数字 "的安全令牌,用来保护URL和表单免受恶意攻击。它帮助WordPress确定一个请求是否有效,防止未经授权的行动和输入。
为什么使用WordPress的nonces
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请求,危及网站的内容。
Nonces通过给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与真正的nonce不同,只要它们仍然有效,就可以使用不止一次。WordPress的nonces也是专门为每个会话生成的,这意味着一旦用户登录或退出页面,其值将不再有效。
如何在WordPress中创建一个Nonce
在WordPress中创建nonce需要将代码添加到functions.php文件中。你可以使用你的主机提供商的文件管理器编辑该文件。或者,使用FTP客户端如FileZilla来进行修改。
要为一个URL创建一个nonce,请调用**wp_nonce_url()**函数。指定裸露的URL和括号内代表nonce动作的字符串。下面是一个删除用户账户的nonce的例子。
$nonce = wp_nonce_url( $bare_url, ’delete-user_’.$user->ID );
你可以通过调用**wp_nonce_field()**函数将nonce添加到表单中,同时指定其用户动作的字符串。该函数默认创建了两个隐藏字段--第一个隐藏字段包含nonce值,而第二个字段则是当前的URL。下面是一个删除评论的nonce的例子。
$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请求或其他环境中的非授权码。如果检查失败,WordPress会终止脚本的执行并发回403 Forbidden响应。
使用check_admin_referer()函数来验证从管理界面的表单中传递的nonces。指定nonce字段名以获得最大的保护,特别是如果你不使用默认的_wpnonce字段名。
下面是一个快速的例子,验证一个删除评论的请求的nonce。
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的nonce可以被多次用于认证和授权,只要它们仍然有效。
结论
WordPress的nonce码可以保护网站不受恶意用户寻求执行未经授权的用户操作的影响。简而言之,nonces的作用是在管理界面的URL和表单中嵌入一个查询字符串,确保请求是有效的,来自合法用户。
Nonces可能有助于保护WordPress网站免受CSRF攻击。然而,其他类型的攻击需要不同的安全措施。我们建议在你的网站上实施最佳的WordPress安全实践,以获得最大的保护。
我们希望这篇文章能回答你关于WordPress非代码的问题,祝您好运
