使用Nonce防止WordPress网站受到CSRF攻击
使用 Nonce ( number used once ) 是防止 WordPress 插件受到 CSRF (cross-site request forgery) 攻击最好的方法,WordPress Nonce 通过提供一个随机数,来实现在数据请求(比如,在后台保存插件选项,AJAS 请求,执行其他操作等等)的时候防止未授权的请求。
WordPress Nonce 的主要工作流程:
$nonce= wp_create_nonce('wpjam');
[/pcsh]
<a href="admin.php?page=wpjam&_wpnonce=<?php echo $nonce ?>">
[/pcsh]
$nonce = $_REQUEST['_wpnonce'];
if (!wp_verify_nonce($nonce, 'wpjam') ) {
wp_die("非法操作");
}
[/pcsh]
WordPress Nonce 函数
wp_nonce_field()
输出一个值为 nonce 的隐藏输入框,可以在表单中任意位置插入:
[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]
<form action=... >
<?php wp_nonce_field('wpjam'); ?>
...
</form>
[/pcsh]
wp_nonce_url()
在链接中加入 nonce
[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]
<a href="<?php wp_nonce_url($url, 'wpjam'); ?>">
[/pcsh]
check_admin_referer()
WordPress 后台页面,可以使用 check_admin_referer() 函数验证 nonce,它会自动从链接的查询参数中获取 nonce 并验证它:
[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]
check_admin_referer( 'wpjam');
[/pcsh]
AJAX 中使用 Nonce
首先使用 wp_create_nonce() 函数创建 nonce:
[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]
$nonce = wp_create_nonce('wpjam');
[/pcsh]
然后将 $nonce 作为 _ajax_nonce 参数的值传递给 AJAX 调用:
[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]
$("#text").load(".../ajax_response.php?_ajax_nonce=<?php echo $nonce ?>");
[/pcsh]
check_ajax_referer();
最后在 ajax_response.php 函数中使用 check_ajax_referer() 函数进行验证
示例:
ajax代码:
[pcsh lang="js" tab_size="4" message="" hl_lines="" provider="manual"]
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);
}
});
[/pcsh]
PHP代码:
[pcsh lang="php" tab_size="4" message="" hl_lines="" provider="manual"]
check_ajax_referer( "weixin_robot" );
[/pcsh]
最后更新于 2017-03-17 15:58:08 并被添加「」标签,已有 628 位童鞋阅读过。
此处评论已关闭