最新公告
  • 欢迎您光临大资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!怎么把网页设置成桌面图标
  • wp_nonce_field()函数

    wp_nonce_field()函数 最后编辑:2021-04-26
    增值服务: 自动发货 使用说明 安装指导 环境配置二次开发BUG修复

    wp_nonce_field()函

    在wordpress中,为了增加系统的验证安全性,内置了一些简单的验证,这些验证可以有效的防治注册、提交等操作,如果开发者在主题开发中,对数据库进行了操作,一定要使用到这些函数

    语法结构

    <?php wp_nonce_field($action, $name, $referer, $echo) ?> //为输入框检索或显示随机数隐藏字段

    参数

    $action(可选)操作名称
    $name (可选)Nonce名称
    $referer(可选)是否还应使用wp_referer_field()函数创建referer隐藏表单字段,默认值:true
    $echo(可选)如果$referer参数设置为true,是显示还是返回nonce隐藏表单字段,还是referer隐藏表单字段。默认值:true

    实例

    <? php wp_nonce_field(); ?> //最简单的使用方法,省略所有参数,在表单中添加内容,安全性偏低

    最好给$action和$name命名,可以较大提高WordPress安全性
    <form method =“post”>
    <! – 这里的一些输入…… – >
    <?php wp_nonce_field(’name_of_my_action’,’name_of_nonce_field’); ?>
    </form>

    Nonce 是 WordPress 安全的一个重要组成部分,但是 Nonce 经常会被误解以及误用。它们是授权一个 HTTP 请求到您的网站的一个关键部分,用来保证你的代码安全。

    在这篇文章中,您将了解什么是 nonce,一个 WordPress nonce 是什么,它们是如何能够防御某些类型的攻击,还有他们无法防御的攻击类型,以及如何使用它们。

    什么是Nonce 

    Nonce 是加密散列,用来验证是否是正确的人或客户端所发送的请求。因为 nonce 是使用一个加密散列算法(例如 md5,sha1,sha2)和某种形式的秘密数据构造的,一般来说不太可能创建一个假的 nonce。

    nonce 这个单词意思是:仅使用一次的数字。nonce 安全性的一个关键特性就是一次性使用。即使你拦截获得了一个有效的 nonce,一旦它被使用了,就无法再次使用。这个使得 nonce 对于重复攻击很有效。

    就是说,WordPress nonce,并不是真正的 nonce,因为它可以在某段时间内一直有效,可以通过 nonce_life(详见Code Reference) 这个 filter 来定义它从创建开始的时效。这个意味着从技术上讲 WordPress nonce 可以使用不止一次,但仅限这个定义的时间段里。这个是需要谨记在心的区别。
    跨站点请求伪造
    我们经常认为我们的 WordPress 站点仅仅通过填写表单(如结账表单,文章编辑器,用户个人资料编辑器等等),然后点击提交来接受数据。但是那个仅仅是向一个站点发送 HTTP 请求的许多方法中的一个。

    一旦一个表单的结构被摸清,然后就可以写一个脚本来模仿向这个表单发送请求。利用此漏洞来进行攻击的一种方式就是:在另外一个站点放上此表单的假版本,然后提交回原站点,来插入恶意数据。

    这个就是一个跨站点请求伪造(CSRF)的攻击例子。它很大程度上可以通过使用 nonce 来避免。即使表单保持一模一样,然而 nonce 字段的值无法猜到。

    每个发送给 WordPress 站点的请求,一个选项表单,一个针对 admin-ajax 的请求,Wordpress REST API,或者其他任何可以在站外发起的请求,都应该通过 nonce 来保护。
    Nonce 只是整个系统的一部分
    需要记住的是:仅验证一个 nonce,对于确定发送的请求是否经过授权是不够的。对于任何一个请求,权限的检验都是必要的。思考下面3个在 WordPress 插件中使用 admin-ajax 保存选项的例子:

    <?php
    add_action( ‘wp_ajax_save_weibo’, function(){
    if( isset( $_POST[ ‘weibo’ ] ) ){
    update_option( ‘weibo’, strip_tags( $_POST[ ‘weibo’ ] ) );
    }
    });

    add_action( ‘wp_ajax_save_weibo’, function(){
    if( current_user_can( ‘mange_options’ ) && isset( $_POST[ ‘weibo’ ] ) ){
    update_option( ‘weibo’, strip_tags( $_POST[ ‘weibo’ ] ) );
    }
    });

    add_action( ‘wp_ajax_save_weibo’, function(){
    if( current_user_can( ‘mange_options’ ) && isset( $_POST[ ‘weibo-save-nonce’ ], $_POST[ ‘weibo’ ] ) && wp_verify_nonce( $_POST[ ‘weibo-save-nonce’ ], ‘weibo-save-nonce’ ) ){
    update_option( ‘weibo’, strip_tags( $_POST[ ‘weibo’ ] ) );
    }
    });
    ?>

    第一个例子允许任何拥有有效 cookie 的任何角色的用户来更新这个选项。如果你在 WordPress 站点使用这个代码,而我注册为一个订阅者,我可以登录到这个网站,获得我的 cookie,然后就可以使用浏览器控制台或者在我的 terminal 中使用 cURL 来修改这个选项。这是非常不安全的做法。

    第二个例子会好一些,但是仍然不安全。这个代码中没有 nonce,但是它正确的检查了当前用户的权限。没有 nonce,正如我们前面讲的会受到跨站点请求伪造的攻击影响。这段代码就是钓鱼攻击网站的邀请函啊。

    第三个例子增加了一个 nonce,这是正确的做法。如果我有个管理员 cookie 设置,同时我轻易被钓鱼网站欺骗了,这时候 nonce 将会起作用,让它通过不了,也就不会造成任何破坏。

    Nonce 配合着身份验证一起工作,这样就无法跳过这一个或者另一个验证了。
    使用 Nonce
    WordPress 有着一系列的函数来和 nonce 配合工作。其中两个最重要的函数是 wp_create_nonce() 和 wp_verify_nonce。都可以为动作执行(action)传入可选参数。你应当始终为你的请求设置唯一的动作执行(action)。这意味着你的 nonce 不可以用来重复验证另外一种类型的请求。

    对于 nonce 在表单中使用,有一个助手函数(helper function)叫 wp_nonce_field(),可以用来创建一个 nonce 隐藏字段。下面这个表单可以和上面例子配合:

    <form id=”weibo-form”>
    <label for=”weibo-name”>
    <?php esc_html_e( ‘Weibo’, ‘text-domain’ ); ?>
    </label>
    <input type=”text” id=”weibo-name” value=”<?php echo esc_attr( get_option( ‘weibo’, ”) ); ?>” />
    <?php
    wp_nonce_field( ‘weibo-save-nonce’ );
    submit_button( __( ‘Save’, ‘text-domain’ ) );
    ?>
    </form>
    <script>
    jQuery( document ).ready(function($){
    $( ‘#weibo-form’ ).on( ‘click’, function(e){
    $.post( ajaxurl, {
    ‘weibo-save-nonce’ : $( ‘#_wpnonce’ ).val(),
    weibo: $( ‘#weibo-name’)
    })
    });
    });
    </script>

    这个将会用在只有管理员可以看到的菜单页面。因此 nonce 在被使用输出到屏幕显示的时候,只有管理员可以看到。在 admin-ajax 的回调函数中,nonce 验证和权限验证,结合 WordPress 对用户 cookie 的验证,一起来保证安全。

    在这个例子中,我们使用了 AJAX 来提交表单,但是对于同步 HTTP 请求,这个过程是一样的。
    现在就开始使用 Nonce
    这就是关于 nonce 的一切了。为了提高 WordPress 网站的安全性,记住,无论如何都要使用 Nonce。

    在我总结之前,还有另外两个观点需要说的是:

    关于 Nonce 有一个重要的事情需要谨记在心的是,nonce 其中的一个组成部分就是当前用户的 ID,如果没有登录就是 0。这个意味着 nonce 在用户之间不可分享。这个可能会让人产生困惑,就是如果 nonce 在用户身份验证之前验证,那么正确的 nonce 将会无效。当一个 nonce 伴随着 WordPress REST API nonce 用来验证 cookie 身份验证被使用时,这就是一个会发生的问题。

    另外一个重要的事情需要记住的是,nonce 会受到 PHP 计时攻击的影响。这就是为什么 WordPress 用户需要故意使用低效率的函数 hash_equals() 替代简单高效的字符串比较。你可能产生过通过生成一个期望的值然后用字符串比较来验证一个 nonce 的念头。然而,我建议你不要尝试和优化 nonce 验证的过程。

    就这么多,仅仅简单地介绍了如何使用 nonce。我希望通过这篇文章你可以看到 nonce 是多么的简单,以及对于保证你的代码和站点安全是多么的重要。

    猜你在找

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    大资源
    一个高级程序员模板开发平台
    • 2021-04-26Hi,初次和大家见面了,请多关照!

    发表评论

    售后服务:

    • 售后服务范围 1、商业模板使用范围内问题免费咨询
      2、源码安装、模板安装(一般 ¥50-300)服务答疑仅限SVIP用户
      3、单价超过200元的模板免费一次安装,需提供服务器信息。
      付费增值服务 1、提供dedecms模板、WordPress主题、discuz模板优化等服务请详询在线客服
      2、承接 WordPress、DedeCMS、Discuz 等系统建站、仿站、开发、定制等服务
      3、服务器环境配置(一般 ¥50-300)
      4、网站的问题处理(需额外付费,500元/次/质保三个月)
      售后服务时间 周一至周日(法定节假日除外) 9:00-23:00
      免责声明 本站所提供的模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: 3482249445@qq.com),我们会及时删除,给您带来的不便,我们深表歉意!

    Hi, 如果你对这款模板有疑问,可以跟我联系哦!

    联系作者
    • 12139会员总数(位)
    • 107191资源总数(个)
    • 2750本周发布(个)
    • 339今日发布(个)
    • 3725稳定运行(天)

    开通VIP 知识课堂
    升级SVIP尊享更多特权立即升级
    召唤伊斯特瓦尔