Make WordPress Core

Changeset 46497


Ignore:
Timestamp:
10/14/2019 07:06:04 PM (4 years ago)
Author:
whyisjake
Message:

Backporting several bug fixes.

  • Query: Remove the static query property.
  • HTTP API: Protect against hex interpretation.
  • Filesystem API: Prevent directory travelersals when creating new folders.
  • Administration: Ensure that admin referer nonce is valid.
  • REST API: Send a Vary: Origin header on GET requests.
  • Customizer: Properly sanitize background images.

Backports [46474], [46475], [46476], [46477], [46478], [46483], [46485] to the 4.5 branch.

Location:
branches/4.5
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • branches/4.5

  • branches/4.5/src/wp-includes/class-wp.php

    r44059 r46497  
    1616     * @var array
    1717     */
    18     public $public_query_vars = array('m', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'static', 'pagename', 'page_id', 'error', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots', 'taxonomy', 'term', 'cpage', 'post_type', 'embed' );
     18    public $public_query_vars = array( 'm', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'pagename', 'page_id', 'error', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots', 'taxonomy', 'term', 'cpage', 'post_type', 'embed' );
    1919
    2020    /**
  • branches/4.5/src/wp-includes/functions.php

    r43993 r46497  
    16021602    if ( file_exists( $target ) )
    16031603        return @is_dir( $target );
     1604
     1605    // Do not allow path traversals.
     1606    if ( false !== strpos( $target, '../' ) || false !== strpos( $target, '..' . DIRECTORY_SEPARATOR ) ) {
     1607        return false;
     1608    }
    16041609
    16051610    // We need to find the permissions of the parent folder that exists and inherit that.
  • branches/4.5/src/wp-includes/http.php

    r42912 r46497  
    536536        } else {
    537537            $ip = gethostbyname( $host );
    538             if ( $ip === $host ) // Error condition for gethostbyname()
    539                 $ip = false;
     538            if ( $ip === $host ) { // Error condition for gethostbyname()
     539                return false;
     540            }
    540541        }
    541542        if ( $ip ) {
  • branches/4.5/src/wp-includes/pluggable.php

    r45980 r46497  
    10451045 */
    10461046function check_admin_referer( $action = -1, $query_arg = '_wpnonce' ) {
    1047     if ( -1 == $action )
    1048         _doing_it_wrong( __FUNCTION__, __( 'You should specify a nonce action to be verified by using the first parameter.' ), '3.2' );
     1047    if ( -1 === $action )
     1048        _doing_it_wrong( __FUNCTION__, __( 'You should specify a nonce action to be verified by using the first parameter.' ), '3.2.0' );
    10491049
    10501050    $adminurl = strtolower(admin_url());
     
    10631063    do_action( 'check_admin_referer', $action, $result );
    10641064
    1065     if ( ! $result && ! ( -1 == $action && strpos( $referer, $adminurl ) === 0 ) ) {
     1065    if ( ! $result && ! ( -1 === $action && strpos( $referer, $adminurl ) === 0 ) ) {
    10661066        wp_nonce_ays( $action );
    10671067        die();
     
    10881088 */
    10891089function check_ajax_referer( $action = -1, $query_arg = false, $die = true ) {
     1090    if ( -1 === $action )
     1091        _doing_it_wrong( __FUNCTION__, __( 'You should specify a nonce action to be verified by using the first parameter.' ), '3.2.0' );
     1092
    10901093    $nonce = '';
    10911094
     
    24482451}
    24492452endif;
    2450 
  • branches/4.5/src/wp-includes/query.php

    r39958 r46497  
    14121412            , 'attachment_id'
    14131413            , 'name'
    1414             , 'static'
    14151414            , 'pagename'
    14161415            , 'page_id'
     
    16281627            // post is being queried.
    16291628            $this->is_single = true;
    1630         } elseif ( '' != $qv['static'] || '' != $qv['pagename'] || !empty($qv['page_id']) ) {
     1629        } elseif ( '' != $qv['pagename'] || !empty($qv['page_id']) ) {
    16311630            $this->is_page = true;
    16321631            $this->is_single = false;
  • branches/4.5/src/wp-includes/rest-api.php

    r36947 r46497  
    396396        header( 'Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE' );
    397397        header( 'Access-Control-Allow-Credentials: true' );
     398        header( 'Vary: Origin', false );
     399    } elseif ( ! headers_sent() && 'GET' === $_SERVER['REQUEST_METHOD'] && ! is_user_logged_in() ) {
     400        header( 'Vary: Origin', false );
    398401    }
    399402
  • branches/4.5/tests/phpunit/tests/auth.php

    r36617 r46497  
    142142    }
    143143
     144    public function test_check_admin_referer_with_default_action_as_string_not_doing_it_wrong() {
     145        // A valid nonce needs to be set so the check doesn't die()
     146        $_REQUEST['_wpnonce'] = wp_create_nonce( '-1' );
     147        $result               = check_admin_referer( '-1' );
     148        $this->assertSame( 1, $result );
     149
     150        unset( $_REQUEST['_wpnonce'] );
     151    }
     152
    144153    /**
    145154     * @ticket 24030
     
    152161
    153162        $this->assertEquals( $count, did_action( $this->nonce_failure_hook ) );
     163    }
     164
     165    /**
     166     * @ticket 36361
     167     */
     168    public function test_check_admin_referer_with_no_action_triggers_doing_it_wrong() {
     169        $this->setExpectedIncorrectUsage( 'check_admin_referer' );
     170
     171        // A valid nonce needs to be set so the check doesn't die()
     172        $_REQUEST['_wpnonce'] = wp_create_nonce( -1 );
     173        $result = check_admin_referer();
     174        $this->assertSame( 1, $result );
     175
     176        unset( $_REQUEST['_wpnonce'] );
     177    }
     178
     179    /**
     180     * @ticket 36361
     181     */
     182    public function test_check_ajax_referer_with_no_action_triggers_doing_it_wrong() {
     183        $this->setExpectedIncorrectUsage( 'check_ajax_referer' );
     184
     185        // A valid nonce needs to be set so the check doesn't die()
     186        $_REQUEST['_wpnonce'] = wp_create_nonce( -1 );
     187        $result = check_ajax_referer();
     188        $this->assertSame( 1, $result );
     189
     190        unset( $_REQUEST['_wpnonce'] );
    154191    }
    155192
  • branches/4.5/tests/phpunit/tests/query/vars.php

    r36048 r46497  
    1717        do_action( 'init' );
    1818
    19         $this->assertEquals( array(
     19        $this->assertEquals(
     20            array(
    2021
    21             // Static public query vars:
    22             'm',
    23             'p',
    24             'posts',
    25             'w',
    26             'cat',
    27             'withcomments',
    28             'withoutcomments',
    29             's',
    30             'search',
    31             'exact',
    32             'sentence',
    33             'calendar',
    34             'page',
    35             'paged',
    36             'more',
    37             'tb',
    38             'pb',
    39             'author',
    40             'order',
    41             'orderby',
    42             'year',
    43             'monthnum',
    44             'day',
    45             'hour',
    46             'minute',
    47             'second',
    48             'name',
    49             'category_name',
    50             'tag',
    51             'feed',
    52             'author_name',
    53             'static',
    54             'pagename',
    55             'page_id',
    56             'error',
    57             'attachment',
    58             'attachment_id',
    59             'subpost',
    60             'subpost_id',
    61             'preview',
    62             'robots',
    63             'taxonomy',
    64             'term',
    65             'cpage',
    66             'post_type',
    67             'embed',
     22                // Static public query vars:
     23                'm',
     24                'p',
     25                'posts',
     26                'w',
     27                'cat',
     28                'withcomments',
     29                'withoutcomments',
     30                's',
     31                'search',
     32                'exact',
     33                'sentence',
     34                'calendar',
     35                'page',
     36                'paged',
     37                'more',
     38                'tb',
     39                'pb',
     40                'author',
     41                'order',
     42                'orderby',
     43                'year',
     44                'monthnum',
     45                'day',
     46                'hour',
     47                'minute',
     48                'second',
     49                'name',
     50                'category_name',
     51                'tag',
     52                'feed',
     53                'author_name',
     54                'pagename',
     55                'page_id',
     56                'error',
     57                'attachment',
     58                'attachment_id',
     59                'subpost',
     60                'subpost_id',
     61                'preview',
     62                'robots',
     63                'taxonomy',
     64                'term',
     65                'cpage',
     66                'post_type',
     67                'embed',
    6868
    69             // Dynamically added public query vars:
    70             'post_format',
    71             'rest_route',
     69                // Dynamically added public query vars:
     70                'post_format',
     71                'rest_route',
    7272
    73         ), $wp->public_query_vars, 'Care should be taken when introducing new public query vars. See https://core.trac.wordpress.org/ticket/35115' );
     73            ),
     74            $wp->public_query_vars,
     75            'Care should be taken when introducing new public query vars. See https://core.trac.wordpress.org/ticket/35115'
     76        );
    7477    }
    7578
Note: See TracChangeset for help on using the changeset viewer.