Make WordPress Core


Ignore:
Timestamp:
10/12/2023 03:09:08 PM (20 months ago)
Author:
davidbaumwald
Message:

Grouped backports to the 5.5 branch.

  • Comments: Prevent users who can not see a post from seeing comments on it.
  • Shortcodes: Restrict media shortcode ajax to certain type.
  • REST API: Ensure no-cache headers are sent when methods are overridden.
  • REST API: Limit search_columns for users without list_users.
  • Prevent unintended behavior when certain objects are unserialized.

Merges [56833], [56834], [56835], [56836], and [56838] to the 5.5 branch.
Props xknown, jorbin, joehoyle, timothyblynjacobs, peterwilsoncc, ehtis, tykoted, antpb, rmccue.

Location:
branches/5.5
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/5.5

  • branches/5.5/src/wp-includes/rest-api/class-wp-rest-server.php

    r48576 r56880  
    282282
    283283        /**
    284          * Send nocache headers on authenticated requests.
    285          *
    286          * @since 4.4.0
    287          *
    288          * @param bool $rest_send_nocache_headers Whether to send no-cache headers.
    289          */
    290         $send_no_cache_headers = apply_filters( 'rest_send_nocache_headers', is_user_logged_in() );
    291         if ( $send_no_cache_headers ) {
    292             foreach ( wp_get_nocache_headers() as $header => $header_value ) {
    293                 if ( empty( $header_value ) ) {
    294                     $this->remove_header( $header );
    295                 } else {
    296                     $this->send_header( $header, $header_value );
    297                 }
    298             }
    299         }
    300 
    301         /**
    302284         * Filters whether the REST API is enabled.
    303285         *
     
    365347         * header.
    366348         */
     349        $method_overridden = false;
    367350        if ( isset( $_GET['_method'] ) ) {
    368351            $request->set_method( $_GET['_method'] );
    369352        } elseif ( isset( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ) ) {
    370353            $request->set_method( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] );
     354            $method_overridden = true;
    371355        }
    372356
     
    426410         */
    427411        $served = apply_filters( 'rest_pre_serve_request', false, $result, $request, $this );
     412
     413        /**
     414         * Filters whether to send nocache headers on a REST API request.
     415         *
     416         * @since 4.4.0
     417         * @since 6.x.x Moved the block to catch the filter added on rest_cookie_check_errors() from rest-api.php
     418         *
     419         * @param bool $rest_send_nocache_headers Whether to send no-cache headers.
     420         */
     421        $send_no_cache_headers = apply_filters( 'rest_send_nocache_headers', is_user_logged_in() );
     422
     423        // send no cache headers if the $send_no_cache_headers is true
     424        // OR if the HTTP_X_HTTP_METHOD_OVERRIDE is used but resulted a 4xx response code.
     425        if ( $send_no_cache_headers || ( true === $method_overridden && strpos( $code, '4' ) === 0 ) ) {
     426            foreach ( wp_get_nocache_headers() as $header => $header_value ) {
     427                if ( empty( $header_value ) ) {
     428                    $this->remove_header( $header );
     429                } else {
     430                    $this->send_header( $header, $header_value );
     431                }
     432            }
     433        }
    428434
    429435        if ( ! $served ) {
Note: See TracChangeset for help on using the changeset viewer.