1. 云栖社区>
  2. PHP教程>
  3. 正文

使用 Nonce 防止 WordPress 网站受到 CSRF 攻击

作者:用户 来源:互联网 时间:2017-12-01 14:13:21

wordpress网站最好

使用 Nonce 防止 WordPress  网站受到 CSRF 攻击 - 摘要: 本文讲的是使用 Nonce 防止 WordPress 网站受到 CSRF 攻击, 使用 Nonce ( number used once ) 是防止 WordPress 插件受到 CSRF (cross-site request forgery) 攻击最好的方法,WordPress Nonce 通过提供一个随机数,来实

使用 Nonce ( number used once ) 是防止 WordPress 插件受到 CSRF (cross-site request forgery) 攻击最好的方法,WordPress Nonce 通过提供一个随机数,来实现在数据请求(比如,在后台保存插件选项,AJAS 请求,执行其他操作等等)的时候防止未授权的请求。

WordPress Nonce 基本流程

WordPress Nonce 的主要工作流程:

  1. 首先使用一个唯一的标示符生成 nonce
  2. 将生成的 nonce 和链接或者表单中的其他数据一起传递给脚本
  3. 在做其他事情之前验证 nonce

首先可以使用wp_create_nonce()函数创建 nonce

$nonce= wp_create_nonce('wpjam');

然后将生成 $nonce 的值作为参数传递给请求中,如:

<a href="admin.php?page=wpjam&_wpnonce=<?php echo $nonce ?>">

最后在执行其他动作的时候,使用wp_verify_nonce()函数验证下 nonce。

$nonce = $_REQUEST['_wpnonce'];if (!wp_verify_nonce($nonce, 'wpjam') ) {	wp_die("非法操作");}

所以整个过程还是非常简单的。

WordPress Nonce 函数

WordPress 还提供一些函数简化 nonce 在特殊场景下的使用。比如在表单中,可以使用函数wp_nonce_field()输出一个值为 nonce 的隐藏输入框,可以在表单中任意位置插入:

<form action=... ><?php wp_nonce_field('wpjam'); ?>...</form>

如果想在链接中加入 nonce,可以使用wp_nonce_url()函数:

<a href="<?php wp_nonce_url($url, 'wpjam'); ?>">

如果在 WordPress 后台页面,可以使用check_admin_referer()函数验证 nonce,它会自动从链接的查询参数中获取 nonce 并验证它:

check_admin_referer( 'wpjam');

在 AJAX 中使用 Nonce

在 AJAX 脚本中 nonce 也是非常容易的,首先使用wp_create_nonce()函数创建 nonce:

$nonce = wp_create_nonce('wpjam');

然后将 $nonce 作为 _ajax_nonce 参数的值传递给 AJAX 调用:

$("#text").load(".../ajax_response.php?_ajax_nonce=<?php echo $nonce ?>");

最后在 ajax_response.php 函数中使用check_ajax_referer()函数进行验证:

check_ajax_referer('wpjam');

举个详细的例子,比如微信机器人 WordPress 插件,统计微信分享的 AJAX 代码中:

var nonce = <?php echo wp_create_nonce( 'weixin_robot' ) ?>jQuery.ajax({	type: "post",	url: ajax_url,	data: { 		action:		'weixin_share', 		share_type:	share_type,		post_id:	post_id, 		link:		link, 		_ajax_nonce: 	nonce	},	success: function(html){		alert(html);	}});

服务器处理代码:

check_ajax_referer( "weixin_robot" );

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索wordpress , 网站 最好 ,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一

云服务器9.9元/月,大学必备