WordPress.org

Make WordPress Core

Ticket #20770: 20770.2.diff

File 20770.2.diff, 4.6 KB (added by kurtpayne, 2 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}