WordPress.org

Make WordPress Core

Ticket #20770: 20770.2.diff

File 20770.2.diff, 4.6 KB (added by kurtpayne, 6 years ago)

Reset the nonce every time widgets are saved

  • wp-includes/pluggable.php

     
    831831 *
    832832 * @param string $action Action nonce
    833833 * @param string $query_arg where to look for nonce in $_REQUEST (since 2.5)
     834 * @param bool $die Die if checking fails
     835 * @param bool $renonce If checking succeeds, calculate a new nonce and send it as an X-WP-nonce header
    834836 */
    835 function check_ajax_referer( $action = -1, $query_arg = false, $die = true ) {
     837function check_ajax_referer( $action = -1, $query_arg = false, $die = true, $renonce = false ) {
    836838        if ( $query_arg )
    837839                $nonce = $_REQUEST[$query_arg];
    838840        else
     
    849851
    850852        do_action('check_ajax_referer', $action, $result);
    851853
     854        if ( $renonce && !headers_sent() )
     855                header( 'X-WP-nonce: ' . $action . '=' . wp_create_nonce( $action ) );
     856       
    852857        return $result;
    853858}
    854859endif;
  • wp-includes/script-loader.php

     
    373373                $scripts->add( 'admin-gallery', "/wp-admin/js/gallery$suffix.js", array( 'jquery-ui-sortable' ) );
    374374
    375375                $scripts->add( 'admin-widgets', "/wp-admin/js/widgets$suffix.js", array( 'jquery-ui-sortable', 'jquery-ui-draggable', 'jquery-ui-droppable' ), false, 1 );
     376                $scripts->localize( 'admin-widgets', 'widgetsL10n', array(
     377                        'loggedOut' => __('You are logged out!')
     378                ));
    376379
    377380                $scripts->add( 'theme', "/wp-admin/js/theme$suffix.js", array( 'jquery' ), false, 1 );
    378381
  • wp-admin/includes/ajax-actions.php

     
    15101510}
    15111511
    15121512function wp_ajax_widgets_order() {
    1513         check_ajax_referer( 'save-sidebar-widgets', 'savewidgets' );
     1513        check_ajax_referer( 'save-sidebar-widgets', 'savewidgets', true, true );
    15141514
    15151515        if ( !current_user_can('edit_theme_options') )
    15161516                wp_die( -1 );
     
    15431543function wp_ajax_save_widget() {
    15441544        global $wp_registered_widgets, $wp_registered_widget_controls, $wp_registered_widget_updates;
    15451545
    1546         check_ajax_referer( 'save-sidebar-widgets', 'savewidgets' );
     1546        check_ajax_referer( 'save-sidebar-widgets', 'savewidgets', true, true );
    15471547
    15481548        if ( !current_user_can('edit_theme_options') || !isset($_POST['id_base']) )
    15491549                wp_die( -1 );
  • wp-admin/js/widgets.dev.js

     
    189189                                a['sidebars[' + $(this).attr('id') + ']'] = $(this).sortable('toArray').join(',');
    190190                });
    191191
    192                 $.post( ajaxurl, a, function() {
     192                var xhr = $.post( ajaxurl, a, function() {
    193193                        $('img.ajax-feedback').css('visibility', 'hidden');
     194                        nonce_header = xhr.getResponseHeader("X-WP-nonce");
     195                        nonce = nonce_header.split("=", 2)[1];
     196                        $('#_wpnonce_widgets').val(nonce);
    194197                });
    195198
    196199                this.resize();
     
    212215
    213216                data += '&' + $.param(a);
    214217
    215                 $.post( ajaxurl, data, function(r){
     218                var xhr = $.post( ajaxurl, data, function(r){
    216219                        var id;
    217220
     221                        if ( "0" === r ) {
     222                                logout_message = $('.logout-message', widget)
     223                                if ( !logout_message.length ) {
     224                                        $('img.ajax-feedback', widget).parent().parent().append($('<div class="error logout-message"><p>' + widgetsL10n.loggedOut + '</p></div>'));
     225                                }
     226                                $('.ajax-feedback', widget).css('visibility', 'hidden');
     227                                logout_message.fadeOut(50).fadeIn(500);
     228                                return false;
     229                        }
     230
    218231                        if ( del ) {
    219232                                if ( !$('input.widget_number', widget).val() ) {
    220233                                        id = $('input.widget-id', widget).val();
     
    236249                                }
    237250                        } else {
    238251                                $('.ajax-feedback').css('visibility', 'hidden');
     252                                $('.logout-message', widget).hide();
    239253                                if ( r && r.length > 2 ) {
    240254                                        $('div.widget-content', widget).html(r);
    241255                                        wpWidgets.appendTitle(widget);
    242256                                        wpWidgets.fixLabels(widget);
    243257                                }
    244258                        }
    245                         if ( order )
     259                        if ( order ) {
    246260                                wpWidgets.saveOrder();
     261                        } else {
     262                                nonce_header = xhr.getResponseHeader("X-WP-nonce");
     263                                nonce = nonce_header.split("=", 2)[1];
     264                                $('#_wpnonce_widgets').val(nonce);
     265                        }
    247266                });
    248267        },
    249268
  • wp-admin/css/wp-admin.dev.css

     
    78837883        display: block;
    78847884}
    78857885
    7886 .widget .widget-inside p {
     7886.widget-inside p {
    78877887        margin: 0 0 1em;
    78887888        padding: 0;
    78897889}