WordPress安全:使用Nonce保护主题和插件代码
保护WordPress主题或插件代码的安全至关重要,可以有效防止恶意用户的攻击。我们之前已经介绍过如何在WordPress中清理、转义和验证表单数据,以及如何使用VIP扫描器提高WordPress主题质量。今天,我们将探讨Nonce(一次性使用数字)如何帮助保护WordPress主题和插件的安全。
关键要点
- WordPress Nonce,或“一次性使用数字”,是独特的安全令牌,用于增强WordPress网站的安全性,方法是验证用户请求并防止恶意企图。它们在防止跨站点请求伪造(CSRF)攻击方面特别有用。
- Nonce的工作原理是为每个用户会话、表单提交或AJAX请求生成一个唯一令牌。然后在处理请求时验证此令牌,如果不匹配,则拒绝请求。这使得攻击者难以预测或滥用令牌。
- 在WordPress中创建Nonce是通过使用WordPress函数
wp_create_nonce()
实现的,该函数接受一个表示要保护的操作的单个字符串参数。验证Nonce是使用wp_verify_nonce()
函数完成的,该函数接受两个参数:要验证的Nonce和关联的操作。 - Nonce可用于WordPress中的AJAX请求,从而增加了防止CSRF攻击的额外安全层。Nonce也是特定于用户的,通过确保为一个用户创建的Nonce对另一个用户无效,提供了额外的安全层。
什么是WordPress Nonce?
WordPress Nonce定义为:
……一个“一次性使用数字”,用于帮助保护URL和表单免受某些类型的滥用(恶意或其他)。 https://www.php.cn/link/c5af1dfde10402285102771ad64b3dac
虽然在WordPress中,Nonce从技术上讲不是数字(它是由字母和数字组成的哈希值),但它确实有助于防止恶意用户运行操作。
WordPress Nonce的工作分为两部分:
- 创建Nonce(哈希值),通过表单或操作提交它,以及
- 验证Nonce,然后接受表单数据或运行操作。
例如,当您在WordPress管理屏幕中删除帖子时,您会注意到URL包含一个_wpnonce
参数:
https://www.php.cn/link/18175d262a01ebf04bc03e38e48e3ffc
删除帖子的例程将检查帖子542是否具有a03ac85772
的Nonce值,然后再删除帖子。如果Nonce不存在或与预期值不匹配,则不会删除帖子。
这可以防止恶意用户潜在地删除大量帖子。例如,以下内容将不起作用,因为Nonce属于帖子ID 542:
https://www.php.cn/link/322d830da1130169fb4ca1c7543799d0 https://www.php.cn/link/dd4143061640d55fb312dd0ce8afa76e https://www.php.cn/link/9e0f9113b44003201076a9fade1b72d8
现在让我们看看如何在插件中实现WordPress Nonce。
设置我们的WordPress插件
让我们从一个具有自身设置屏幕的基本插件开始。设置屏幕有一个字段,可以提交并保存在WordPress选项表中。
在wp-content/plugins/implementing-wordpress-nonces/implementing-wordpress-nonces.php
中的新文件中输入以下代码:
// ... (插件代码,与原文相同) ...
通过WordPress管理>插件屏幕激活插件,您将看到一个新的Nonces菜单项:
单击此项,您将进入设置屏幕,其中只有一个字段:
输入任何值,单击“保存”,如果一切正常,您将看到确认信息以及您刚刚输入的值:
演示安全漏洞
将以下URL输入到您的Web浏览器地址栏中(将域名替换为您安装WordPress的位置):
https://www.php.cn/link/0e143c3bef0f7759c230664c4dc905f8
注意发生了什么?该值被简单地保存为abc,只需直接访问URL并登录到WordPress即可:
虽然我们可以在代码中使用$_POST
代替$_REQUEST
(我们使用$_REQUEST
是为了更容易演示安全问题),但这无济于事——恶意用户仍然可以通过自己或诱导您单击链接来让您向此屏幕发送POST请求,从而导致选项值更改。
这被称为跨站点请求伪造(或CSRF)。恶意网站、电子邮件、应用程序等会导致用户的Web浏览器执行不需要的操作。
我们现在将创建和验证WordPress Nonce,以防止这种攻击成为可能。
使用Nonce保护我们的插件
如前所述,此过程分为两个步骤:首先,我们需要创建一个将与我们的表单一起提交的Nonce。其次,我们需要在提交表单时验证该Nonce。
要在我们的表单中创建Nonce字段,我们可以使用wp_nonce_field()
:
获取或显示Nonce隐藏表单字段……用于验证表单请求的内容是否来自当前站点,而不是其他地方……
在我们的输入按钮上方添加以下代码:
// ... (插件代码,与原文相同) ...
wp_nonce_field
接受四个参数——前两个最重要:
-
$action
:这决定了我们正在运行的特定操作,并且应该唯一。最好用插件名称作为操作的前缀,因为可能会有多个操作运行。在本例中,我们正在保存某些内容,因此我们使用了implementing_wordpress_nonces_save
-
$name
:这决定了此函数创建的隐藏字段的名称。如上所述,我们已使用插件名称作为其前缀,因此将其命名为implementing_wordpress_nonces_nonce
如果我们重新加载设置屏幕,更改我们的值并单击“保存”,您会注意到该值仍然会更改。我们现在需要实现对提交的Nonce字段的检查,使用wp_verify_nonce( $name, $action )
:
验证Nonce是否正确且相对于指定操作未过期。该函数用于验证当前请求中发送的Nonce,通常通过
$_REQUEST
PHP变量访问。
将我们插件的admin_screen()
函数的“保存设置”部分替换为以下代码:
wp_nonce_field( 'implementing_wordpress_nonces_save', 'implementing_wordpress_nonces_nonce' );
此代码执行以下几个操作:
- 首先,它检查我们是否提交了某些内容。
- 然后,它检查我们的Nonce字段是否存在,如果存在,则尝试根据我们期望的操作验证Nonce的值。
- 如果检查通过,则更新选项。
- 如果检查失败,我们将抛出一个403错误,消息为“无效的Nonce指定”。
为了确保我们的Nonce正在创建和验证,让我们再次尝试访问我们的“恶意”直接URL:
https://www.php.cn/link/0e143c3bef0f7759c230664c4dc905f8.
如果我们的Nonce已实现并正在验证,您将看到“无效的Nonce指定”通知:
...(剩余部分与原文相同,只是对语言和表达方式进行细微调整,保持原意不变)...
以上是什么是WordPress Nonces?的详细内容。更多信息请关注PHP中文网其他相关文章!

您想将博客从 WordPress.com 移至 WordPress.org 吗? 许多初学者从 WordPress.com 开始,但很快意识到其局限性,并希望切换到自托管 WordPress.org 平台。 在本分步指南中,我们将向您展示如何正确地将博客从 WordPress.com 移动到 WordPress.org。 为什么从 WordPress.com 迁移到 WordPress.org? WordPress.com 允许任何人通过创建帐户来

您是否正在寻找自动化 WordPress 网站和社交媒体帐户的方法? 通过自动化,您将能够在 Facebook、Twitter、LinkedIn、Instagram 等平台上自动分享您的 WordPress 博客文章或更新。 在本文中,我们将向您展示如何使用 IFTTT、Zapier 和 Uncanny Automator 轻松实现 WordPress 和社交媒体的自动化。 为什么要自动化 WordPress 和社交媒体? 自动化您的WordPre

就在几天前,我们的一位用户报告了一个不寻常的问题。问题是他达到了自定义菜单项的限制。达到菜单项限制后他保存的任何内容都将根本无法保存。我们从未听说过这个问题,因此我们决定在本地安装上尝试一下。创建了 200 多个菜单项并保存。效果很好。将 100 个项目移至下拉列表中,保存效果非常好。那时我们就知道这与服务器有关。经过进一步研究,似乎还有许多其他人也遇到了同样的问题。深入挖掘后,我们发现了一张 trac 票证 ( #14134 ) 强调了这个问题。在阅读了非常

您需要将自定义元字段添加到 WordPress 中的自定义分类法吗? 自定义分类法可让您组织除类别和标签之外的内容。有时添加其他字段来描述它们很有用。 在本文中,我们将向您展示如何将其他元字段添加到他们创建的分类法中。 何时应将自定义元字段添加到自定义分类法? 当您在WordPress 网站上创建新内容时,您可以使用两种默认分类法(类别和标签)对其进行组织。 一些网站受益于自定义分类法的使用。这些允许您以其他方式对内容进行排序。 例如,

Windows live writer 是一款多功能工具,可让您直接从桌面将帖子发布到 WordPress 博客上。这意味着您根本不需要登录 WordPress 管理面板来更新您的博客。在本教程中,我将向您展示如何使用 Windows Live Writer 为您的 WordPress 博客启用桌面发布。 如何在 WordPress 上设置 Windows Live Writer 第 1 步: 要通过 Windows Live Writer 在 WordPr

最近,我们的一位用户报告了一个非常奇怪的安装问题。写帖子时,他们看不到自己写的任何内容。因为帖子编辑器的文字是白色的。更重要的是,所有可视化编辑器按钮都丢失了,并且从可视化切换到 HTML 的功能也不起作用。在本文中,我们将向您展示如何修复 WordPress 可视化编辑器中的白色文本和缺失按钮问题。 初学者注意事项:如果您正在寻找可能在其他网站的屏幕截图中看到的隐藏按钮,那么您可能正在寻找厨房水槽。您必须单击厨房水槽图标才能看到其他选项,例如下划线、从单词复制等。

您想在 WordPress 中显示用户电子邮件中的头像吗? Gravatar 是一项将用户的电子邮件地址连接到在线头像的网络服务。WordPress 会自动在评论部分显示访问者的头像,但您可能也想将它们添加到网站的其他区域。 在本文中,我们将向您展示如何在 WordPress 中显示用户电子邮件中的头像。 什么是 Gravatar 以及为什么要显示它? Gravatar代表全球认可的头像,它允许人们将图片链接到他们的电子邮件地址。 如果网站支

您想更改 WordPress 中的默认媒体上传位置吗? 将媒体文件移动到其他文件夹可以提高网站的速度和性能,并帮助您更快地创建备份。它还使您可以自由地以最适合您的方式组织文件。 在本文中,我们将向您展示如何更改 WordPress 中的默认媒体上传位置。 为什么要更改默认媒体上传位置? 默认情况下,WordPress 将所有图像和其他媒体文件存储在 /wp-content/uploads/ 文件夹中。 在此文件夹中,您将找到不同年份和月份的子


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SublimeText3汉化版
中文版,非常好用

Dreamweaver Mac版
视觉化网页开发工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器