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中文网其他相关文章!

WordPressiser-FrightlyDuetLoitsIntuitiveInterfaceAndcms,whosparateContentFromDesign.itoffersArichTextedextEditorforeasyContentCreationAndialibraryFororRaryFororRory.itsflexeNhangedBancedBynhangedBynHangedBynumereNumerSandeMesandPlugins,elloverSandplugins,elloverOverUseCanimpActpercrance

1)ITSUPPORTSE-CommerceWithPluginSlikeWooCommerce,允许ProductManagementAndAndPaymentProcessing.2)ITSERVESASASASACMSACMSACMSMSACMSMSACMSMASTRATATEBLOGS,增强SeoAndEngagement.3)

WordPressIsnotIdeAlforHigh-TrafficWebsites,customandCompleXapplications,Security-SensitiveApplications,Real-TimedataProcessing,AndhighlyCustomizedUserInterfaces.forhigh-Trafficsites,USENENEXT.JSORXOLCT.JSORXORX.JSORCUSTOMSOMOLTICTS; forCompleXapplications; forcomplexapplications; optfordjangoorrub

Yes,youcanbuildablogwithWordPress.1)ChoosebetweenWordPress.comforbeginnersorWordPress.orgformorecontrol.2)Selectathemetopersonalizeyourblog'slook.3)Usepluginstoenhancefunctionality,likeSEOandsocialmediaintegration.4)Customizeyourthemewithsimplecodetw

WordPressCanbeseCureifManagedProperly.1)keepthewordPressCoreUpdatedTopatchVulnerabilities.2)vetandupdatepluginsandthemesfromreputables.3)EnforcestrongpasseTSandusetWordssandusetWordwordwo-factorauthenticaliation.4)

WordPressCanbuildVariousTypesofwebsites:1)个人博客,EasyTosetUpWithTheMesandPlugins.2)BusinessWebsites,使用drag-and-dropbuilders.3)e-commercePlatforms,forwoocommerceforsemcommerceforseameamseamelesssites.4)communitySites.4)conduction.4)使用bbudicatipration

WordPressisapowerfulCMSwithsignificantadvantagesandchallenges.1)It'suser-friendlyandcustomizable,idealforbeginners.2)Itsflexibilitycanleadtositebloatandsecurityissuesifnotmanagedproperly.3)Regularupdatesandperformanceoptimizationsarenecessarytomainta

WordPressExcccelineaseeandaDaptability,MakeitiTidealForBeginnersandsMallTomedium-SizedBusinesses.1)siseofuse:wordpressisuser-Frylyly.2)安全:drupalleadswithstrongsecurityfeatures.3)性能:performance:performance formation:ghandoffersefersefersefersefersefersefersefersexcellentperformanceeduetonodeutonode.jsorscor.jssor.jjsy.jjsy.jjsy.4)4)


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

禅工作室 13.0.1
功能强大的PHP集成开发环境

WebStorm Mac版
好用的JavaScript开发工具

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