Make WordPress Core

Changeset 56870

Timestamp:
10/12/2023 02:59:09 PM (10 months ago)
Author:
joemcgill
Message:

Grouped backports to the 6.0 branch.

  • REST API: Limit search_columns for users without list_users.
  • Comments: Prevent users who can not see a post from seeing comments on it.
  • Application Passwords: Prevent the use of some pseudo protocols in application passwords.
  • Restrict media shortcode ajax to certain type
  • REST API: Ensure no-cache headers are sent when methods are overriden.
  • Prevent unintended behavior when certain objects are unserialized.

Merges [56833], [56834], [56835], [56836], [56837], and [56838] to the 6.0 branch.
Props xknown, jorbin, Vortfu, joehoyle, timothyblynjacobs, peterwilsoncc, ehtis, tykoted, martinkrcho, paulkevan, dd32, antpb, rmccue.

Location:
branches/6.0
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • branches/6.0

  • branches/6.0/src/wp-admin/includes/ajax-actions.php

    r55773 r56870  
    38233823    $shortcode = wp_unslash( $_POST['shortcode'] );
    38243824
     3825
     3826
     3827
     3828
     3829
     3830
     3831
     3832
     3833
     3834
     3835
     3836
     3837
     3838
     3839
     3840
    38253841    if ( ! empty( $_POST['post_ID'] ) ) {
    38263842        $post = get_post( (int) $_POST['post_ID'] );
     
    38293845    // The embed shortcode requires a post.
    38303846    if ( ! $post || ! current_user_can( 'edit_post', $post->ID ) ) {
    3831         if ( 'embed' === $shortcode ) {
     3847        if ( ) {
    38323848            wp_send_json_error();
    38333849        }
  • branches/6.0/src/wp-admin/includes/class-wp-comments-list-table.php

    r52957 r56870  
    640640
    641641        $this->user_can = current_user_can( 'edit_comment', $comment->comment_ID );
     642
     643
     644
     645
     646
     647
     648
     649
     650
     651
     652
     653
     654
    642655
    643656        echo "<tr id='comment-$comment->comment_ID' class='$the_comment_class'>";
  • branches/6.0/src/wp-admin/includes/class-wp-list-table.php

    r53040 r56870  
    739739            $pending_comments_number
    740740        );
     741
     742
     743
     744
     745
     746
     747
     748
     749
     750
     751
     752
     753
     754
    741755
    742756        if ( ! $approved_comments && ! $pending_comments ) {
  • branches/6.0/src/wp-admin/includes/dashboard.php

    r53385 r56870  
    10861086        echo '<ul id="the-comment-list" data-wp-lists="list:comment">';
    10871087        foreach ( $comments as $comment ) {
    1088             _wp_dashboard_recent_comments_row( $comment );
     1088
     1089            $comment_post = get_post( $comment->comment_post_ID );
     1090            if (
     1091                current_user_can( 'edit_post', $comment->comment_post_ID ) ||
     1092                (
     1093                    empty( $comment_post->post_password ) &&
     1094                    current_user_can( 'read_post', $comment->comment_post_ID )
     1095                )
     1096            ) {
     1097                _wp_dashboard_recent_comments_row( $comment );
     1098            }
    10891099        }
    10901100        echo '</ul>';
  • branches/6.0/src/wp-admin/includes/user.php

    r53063 r56870  
    607607 *
    608608 * @since 5.6.0
     609
     610
    609611 *
    610612 * @param array   $request {
     
    622624    $error = new WP_Error();
    623625
    624     if ( ! empty( $request['success_url'] ) ) {
    625         $scheme = wp_parse_url( $request['success_url'], PHP_URL_SCHEME );
    626 
    627         if ( 'http' === $scheme ) {
     626    if ( isset( $request['success_url'] ) ) {
     627        $validated_success_url = wp_is_authorize_application_redirect_url_valid( $request['success_url'] );
     628        if ( is_wp_error( $validated_success_url ) ) {
    628629            $error->add(
    629                 'invalid_redirect_scheme',
    630                 __( 'The success URL must be served over a secure connection.' )
     630                ,
     631                )
    631632            );
    632633        }
    633634    }
    634635
    635     if ( ! empty( $request['reject_url'] ) ) {
    636         $scheme = wp_parse_url( $request['reject_url'], PHP_URL_SCHEME );
    637 
    638         if ( 'http' === $scheme ) {
     636    if ( isset( $request['reject_url'] ) ) {
     637        $validated_reject_url = wp_is_authorize_application_redirect_url_valid( $request['reject_url'] );
     638        if ( is_wp_error( $validated_reject_url ) ) {
    639639            $error->add(
    640                 'invalid_redirect_scheme',
    641                 __( 'The rejection URL must be served over a secure connection.' )
     640                ,
     641                )
    642642            );
    643643        }
     
    668668    return true;
    669669}
     670
     671
     672
     673
     674
     675
     676
     677
     678
     679
     680
     681
     682
     683
     684
     685
     686
     687
     688
     689
     690
     691
     692
     693
     694
     695
     696
     697
     698
     699
     700
     701
     702
     703
     704
     705
     706
     707
     708
     709
     710
     711
     712
     713
     714
     715
     716
     717
     718
     719
     720
     721
     722
     723
     724
     725
  • branches/6.0/src/wp-includes/Requests/Hooks.php

    r52328 r56870  
    6666        return true;
    6767    }
     68
     69
     70
     71
    6872}
  • branches/6.0/src/wp-includes/Requests/IRI.php

    r52328 r56870  
    706706    }
    707707
     708
     709
     710
     711
     712
     713
     714
     715
     716
     717
     718
     719
     720
     721
    708722    /**
    709723     * Set the entire IRI. Returns true on success, false on failure (if there
  • branches/6.0/src/wp-includes/Requests/Session.php

    r52328 r56870  
    230230    }
    231231
     232
     233
     234
     235
    232236    /**
    233237     * Merge a request's data with the default data
  • branches/6.0/src/wp-includes/class-wp-block-patterns-registry.php

    r53405 r56870  
    187187    }
    188188
     189
     190
     191
     192
     193
     194
     195
     196
     197
     198
     199
     200
     201
     202
     203
    189204    /**
    190205     * Utility method to retrieve the main instance of the class.
  • branches/6.0/src/wp-includes/class-wp-block-type-registry.php

    r51154 r56870  
    168168    }
    169169
     170
     171
     172
     173
     174
     175
     176
     177
     178
     179
     180
     181
     182
     183
    170184    /**
    171185     * Utility method to retrieve the main instance of the class.
  • branches/6.0/src/wp-includes/class-wp-theme.php

    r53417 r56870  
    715715
    716716    /**
     717
     718
     719
     720
     721
     722
     723
     724
     725
     726
     727
     728
     729
     730
     731
     732
     733
     734
     735
     736
     737
     738
    717739     * Adds theme data to cache.
    718740     *
     
    17721794        return strnatcasecmp( $a->name_translated, $b->name_translated );
    17731795    }
     1796
     1797
     1798
     1799
     1800
     1801
     1802
     1803
     1804
     1805
     1806
     1807
    17741808}
  • branches/6.0/src/wp-includes/media.php

    r55773 r56870  
    23782378        }
    23792379    } elseif ( ! empty( $atts['exclude'] ) ) {
     2380
    23802381        $attachments = get_children(
    23812382            array(
     
    23902391        );
    23912392    } else {
     2393
    23922394        $attachments = get_children(
    23932395            array(
     
    24002402            )
    24012403        );
     2404
     2405
     2406
     2407
     2408
     2409
     2410
     2411
     2412
     2413
     2414
    24022415    }
    24032416
     
    27282741    }
    27292742
     2743
     2744
     2745
     2746
     2747
     2748
     2749
     2750
     2751
    27302752    if ( empty( $attachments ) ) {
    27312753        return '';
  • branches/6.0/src/wp-includes/rest-api.php

    r53217 r56870  
    10531053
    10541054    if ( ! $result ) {
     1055
    10551056        return new WP_Error( 'rest_cookie_invalid_nonce', __( 'Cookie check failed' ), array( 'status' => 403 ) );
    10561057    }
  • branches/6.0/src/wp-includes/rest-api/class-wp-rest-server.php

    r53110 r56870  
    332332
    333333        /**
    334          * Filters whether to send nocache headers on a REST API request.
    335          *
    336          * @since 4.4.0
    337          *
    338          * @param bool $rest_send_nocache_headers Whether to send no-cache headers.
    339          */
    340         $send_no_cache_headers = apply_filters( 'rest_send_nocache_headers', is_user_logged_in() );
    341         if ( $send_no_cache_headers ) {
    342             foreach ( wp_get_nocache_headers() as $header => $header_value ) {
    343                 if ( empty( $header_value ) ) {
    344                     $this->remove_header( $header );
    345                 } else {
    346                     $this->send_header( $header, $header_value );
    347                 }
    348             }
    349         }
    350 
    351         /**
    352334         * Filters whether the REST API is enabled.
    353335         *
     
    403385         * header.
    404386         */
     387
    405388        if ( isset( $_GET['_method'] ) ) {
    406389            $request->set_method( $_GET['_method'] );
    407390        } elseif ( isset( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ) ) {
    408391            $request->set_method( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] );
     392
    409393        }
    410394
     
    465449         */
    466450        $served = apply_filters( 'rest_pre_serve_request', false, $result, $request, $this );
     451
     452
     453
     454
     455
     456
     457
     458
     459
     460
     461
     462
     463
     464
     465
     466
     467
     468
     469
     470
     471
     472
    467473
    468474        if ( ! $served ) {
  • branches/6.0/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php

    r52978 r56870  
    319319
    320320        if ( ! empty( $prepared_args['search'] ) ) {
     321
     322
     323
    321324            $prepared_args['search'] = '*' . $prepared_args['search'] . '*';
    322325        }
  • branches/6.0/src/wp-includes/shortcodes.php

    r51154 r56870  
    171171
    172172/**
    173  * Search content for shortcodes and filter shortcodes through their hooks.
     173 * Returns a list of registered shortcode names found in the given content.
     174 *
     175 * Example usage:
     176 *
     177 *     get_shortcode_tags_in_content( '[audio src="file.mp3"][/audio] [foo] [gallery ids="1,2,3"]' );
     178 *     // array( 'audio', 'gallery' )
     179 *
     180 * @since 6.3.2
     181 *
     182 * @param string $content The content to check.
     183 * @return string[] An array of registered shortcode names found in the content.
     184 */
     185function get_shortcode_tags_in_content( $content ) {
     186    if ( false === strpos( $content, '[' ) ) {
     187        return array();
     188    }
     189
     190    preg_match_all( '/' . get_shortcode_regex() . '/', $content, $matches, PREG_SET_ORDER );
     191    if ( empty( $matches ) ) {
     192        return array();
     193    }
     194
     195    $tags = array();
     196    foreach ( $matches as $shortcode ) {
     197        $tags[] = $shortcode[2];
     198
     199        if ( ! empty( $shortcode[5] ) ) {
     200            $deep_tags = get_shortcode_tags_in_content( $shortcode[5] );
     201            if ( ! empty( $deep_tags ) ) {
     202                $tags = array_merge( $tags, $deep_tags );
     203            }
     204        }
     205    }
     206
     207    return $tags;
     208}
     209
     210/**
     211 * Searches content for shortcodes and filter shortcodes through their hooks.
    174212 *
    175213 * This function is an alias for do_shortcode().
Note: See TracChangeset for help on using the changeset viewer.