您现在的位置是:首页 > cms教程 > WordPress教程WordPress教程
WordPress中的Nonce使用详解
尔岚2023-07-06WordPress教程已有人查阅
导读Nonce是number used once的缩写,Wordpress的nonce不是数字,而一是串由数字和字符组成的Hash值,不仅只能使用一次,还同时具有生命周期(lifetime)

Nonce是number used once的缩写,Wordpress的nonce不是数字,而一是串由数字和字符组成的Hash值,不仅只能使用一次,还同时具有生命周期(lifetime),在生命周期内,针对每个用户,同样的参数会生成同样的nonce值,直到生命周期结束。这篇文章我们就来介绍一下如何用Nonce来防止CSRF攻击。
创建一个Nonce
Nonce可以被放在Url请求中,也可以放在一个Form的Hidden元素中,然后在Ajax请求时,通过Javascript来获取他它。一个Nonce生命周期只在当前Session中,如果你退出登录后再次登录,之前的nonce也都会失效。
向URL中添加nonce
你可以通过wp_nonce_url()方法来向Url中添加一个Nonce:
wp_nonce_url( $actionurl, $action, $name );
// 例如:
$complete_url = wp_nonce_url( $bare_url, 'trash-post_'.$post->ID );
其中$bare_url(必选)为要添加nonce的url,而$action为为nonce定义的动作名字,可选,默认为-1。
默认情况下,生成的nonce在链接中的名字为_wpnonce,为了避免可能的冲突,在Wordpress3.6版本后,wp_nonce_url增加了可选的$name参数,可以让用户自己指定nonce在链接中的名字。如:
$complete_url = wp_nonce_url( $bare_url, 'trash-post_'.$post->ID, 'my_nonce' );
向Form中添加nonce
你可以能过wp_nonce_field()方法向表单中添加一个hidden元素:
PHP
wp_nonce_field( $action, $name, $referer, $echo )
//例如 :
wp_nonce_field( 'delete-comment_'.$comment_id );
wp_nonce_field( $action, $name, $referer, $echo )
//例如 :
wp_nonce_field( 'delete-comment_'.$comment_id );
调用上面的方法,会生成类似下面的代码:
<input type="hidden" id="_wpnonce" name="_wpnonce" value="796c7766b1" />
<input type="hidden" name="_wp_http_referer" value="/wp-admin/edit-comments.php" />
单独生成一个nonce
如果你只是想要生成一个独立的nonce,可以过wp_create_nonce()方法:
wp_create_nonce( $action );
// 例如:
$nonce = wp_create_nonce( 'my-action_'.$post->ID );
同样的,$action为可选参数,默认为-1。上面的方 返回类似“295a686963”的结果。
验证nonce有效性
验证表单中的nonce
在Admin管理界面,你可以通过check_admin_referer方法来验证Url中Nonce的有效性:
check_admin_referer( $action, $query_arg );
下面是一个例子演示如何在插件中使用check_admin_referer验证nonce:
<form method="post">
<!-- some inputs here -->
<?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?>
</form>
验证方法:
check_admin_referer( 'name_of_my_action', 'name_of_nonce_field' );
验证Ajax中的nonce
如果要检查Ajax请求中的nonce有效性,可以使用check_ajax_referer()方法:
check_ajax_referer( $action, $query_arg, $ )
$ 指定如果$nonce无效,是否结束脚本执行。(默认为True)
一个简单使用check_ajax_referer的例子:
<?php
//Set Your Nonce
$ajax_nonce = wp_create_nonce( "my-special-string" );
?>
<script type="text/javascript">
jQuery(document).ready(function($){
var data = {
action: 'my_action',
security: '<?php echo $ajax_nonce; ?>',
my_string: 'Hello World!'
};
$.post(ajaxurl, data, function(response) {
alert("Response: " + response);
});
});
</script>
在向后通过下面的代码进行验证:
add_action( 'wp_ajax_my_action', 'my_action_function' );
function my_action_function() {
check_ajax_referer( 'my-special-string', 'security' );
echo sanitize_text_field( $_POST['my_string'] );
wp_ ();
}
验证独立生成的nonce
1
wp_verify_nonce( $nonce, $action );
本文标签:
很赞哦! ()
相关教程
图文教程
wordpress添加轮播图的方法
今天我们以WordPress的一个主题Minty开启轮播图的演示过程为例看一下如何添加轮播图。安装主题后,打开“外观 - 主题选项 - 顶部设置”。
禁止WordPress自动更新邮件通知的方法
默认情况下WordPress小版本安全更新后,会发送一封邮件通知您的站点已更新。如果你有多个WordPress站点,每个站都发一次就有些让人厌烦了
WordPress多站点共用一个数据库的方法
很多建站爱好者想要搭建wordpress多站点,共用一个数据库,更新一次多站点全部同时更新。
手机怎么访问本地电脑环境中的wordpress网页
如何手机访问本地电脑下的wordpress网页手机和电脑必须在同一个局域网内。1.需要知道自己电脑的ip ,可以通过ifconfig查看,端口号要知道,可以在mamp软件中查看服务的端口。
相关源码
-
(自适应)平面设计网络工作室个人作品展示网站模板免费下载基于PbootCMS内核开发的响应式网站模板,为设计工作室、创意机构打造的作品展示解决方案。通过模块化布局与极简交互设计,呈现设计作品的视觉细节,支持作品分类、案例解析等多维度展示方式。查看源码 -
(自适应响应式)刷卡机POS机无线支付设备pbootcms网站源码下载本模板基于PbootCMS系统开发,为支付终端设备企业设计,特别适合POS机、移动支付终端、刷卡设备等金融科技产品展示。采用响应式布局技术,确保各类支付终端产品在不同设备查看源码 -
帝国cms淘宝客京东联盟网站整站源码下载本模板基于帝国CMS内核深度开发,为淘宝客行业量身定制。随着腾讯微信与淘宝生态的互联互通,淘宝客链接现可在微信、QQ等平台直接分享,为推广带来更多便利。模板特别优化了店铺推广功能,有效避免商品下架导致的链接失效问题,同时支持京东联盟等多平台商品推广。查看源码 -
(自适应)蓝色五金制品配件管件pbootcms网站源码下载基于PbootCMS内核开发的五金行业专用模板,采用响应式设计架构,确保产品展示在各类移动设备上的呈现。通过模块化布局与工业风视觉设计,帮助五金企业高效展示产品规格、应用场景及技术支持,建立专业可靠的行业形象。查看源码 -
(自适应)蓝色厨卫厨房水龙头阀门水槽设备源码下载基于PbootCMS内核开发,深度适配厨卫设备行业特性。通过精准的产品展示模块与水效标识专区设计,有效呈现五金件工艺细节。响应式布局确保从手机到平板都能展示金属质感与水流动态效果。查看源码 -
自适应手机版五金机械阀门设备通用行业网站模板该PbootCMS内核开发的网站模板适用于阀门设备、五金机械类企业,通过更换文字图片也可快速适配其他工业领域。采用响应式设计,确保PC端与手机端数据同步,操作便捷,并附带测试数据。查看源码
| 分享笔记 (共有 篇笔记) |

