WordPress.org

Make WordPress Core

Ticket #7001: admin_ssl-2.diff

File admin_ssl-2.diff, 8.2 KB (added by tellyworth, 12 years ago)

basic validation, make is_ssl() case insensitive

  • wp-includes/functions.php

     
    17651765        return 0;
    17661766}
    17671767
     1768function is_ssl() {
     1769        return ( 'on' == strtolower($_SERVER['HTTPS']) ) ? true : false;
     1770}
    17681771?>
  • wp-includes/link-template.php

     
    774774
    775775        return apply_filters('shortcut_link', $link);
    776776}
     777
     778// return the site_url option, using https if is_ssl() is true
     779// if $scheme is 'http' or 'https' it will override is_ssl()
     780function site_url($scheme = null) {
     781        // should the list of allowed schemes be maintained elsewhere?
     782        if ( !in_array($scheme, array('http', 'https')) )
     783                $scheme = ( is_ssl() ? 'https' : 'http' );
     784               
     785        return str_replace( 'http://', "{$scheme}://", get_option('siteurl') );
     786}
     787
     788function admin_url($path = '') {
     789        global $_wp_admin_url;
     790
     791        $url = site_url() . '/wp-admin/';
     792
     793        if ( !empty($path) && is_string($path) && strpos($path, '..') === false )
     794                $url .= ltrim($path, '/');
     795
     796        return $url;
     797}
     798
     799function includes_url($path = '') {
     800        global $_wp_includes_url;
     801
     802        $url = site_url() . '/' . WPINC . '/';
     803
     804        if ( !empty($path) && is_string($path) && strpos($path, '..') === false )
     805                $url .= ltrim($path, '/');
     806
     807        return $url;
     808}
     809
    777810?>
  • wp-includes/general-template.php

     
    11361136                        $_file = $color->url;
    11371137                        $_file = ('css/colors-rtl' == $file) ? str_replace('.css','-rtl.css',$_file) : $_file;
    11381138                } else {
    1139                         $_file = get_option( 'siteurl' ) . "/wp-admin/$file.css";
     1139                        $_file = admin_url("$file.css");
    11401140                }
    11411141        }
    11421142        $_file = add_query_arg( 'version', get_bloginfo( 'version' ),  $_file );
  • wp-includes/pluggable.php

     
    469469 */
    470470function wp_validate_auth_cookie($cookie = '') {
    471471        if ( empty($cookie) ) {
    472                 if ( empty($_COOKIE[AUTH_COOKIE]) )
     472                if ( is_ssl() )
     473                        $cookie_name = SECURE_AUTH_COOKIE;
     474                else
     475                        $cookie_name = AUTH_COOKIE;
     476
     477                if ( empty($_COOKIE[$cookie_name]) )
    473478                        return false;
    474                 $cookie = $_COOKIE[AUTH_COOKIE];
     479                $cookie = $_COOKIE[$cookie_name];
    475480        }
    476481
    477482        $cookie_elements = explode('|', $cookie);
     
    514519 *
    515520 * @param int $user_id User ID
    516521 * @param int $expiration Cookie expiration in seconds
     522 * @param bool $secure Whether the cookie is for https delivery only or not.  Not used by default.  For plugin use.
    517523 * @return string Authentication cookie contents
    518524 */
    519 function wp_generate_auth_cookie($user_id, $expiration) {
     525function wp_generate_auth_cookie($user_id, $expiration, $secure = false) {
    520526        $user = get_userdata($user_id);
    521527
    522528        $key = wp_hash($user->user_login . '|' . $expiration);
     
    524530
    525531        $cookie = $user->user_login . '|' . $expiration . '|' . $hash;
    526532
    527         return apply_filters('auth_cookie', $cookie, $user_id, $expiration);
     533        return apply_filters('auth_cookie', $cookie, $user_id, $expiration, $secure);
    528534}
    529535endif;
    530536
     
    550556                $expire = 0;
    551557        }
    552558
    553         $cookie = wp_generate_auth_cookie($user_id, $expiration);
     559        if ( is_ssl() ) {
     560                $secure = true;
     561                $cookie_name = SECURE_AUTH_COOKIE;
     562        } else {
     563                $secure = false;
     564                $cookie_name = AUTH_COOKIE;
     565        }
    554566
    555         do_action('set_auth_cookie', $cookie, $expire);
     567        $cookie = wp_generate_auth_cookie($user_id, $expiration, $secure);
    556568
    557         setcookie(AUTH_COOKIE, $cookie, $expire, COOKIEPATH, COOKIE_DOMAIN);
     569        do_action('set_auth_cookie', $cookie, $expire, $secure);
     570
     571        setcookie($cookie_name, $cookie, $expire, COOKIEPATH, COOKIE_DOMAIN, $secure);
    558572        if ( COOKIEPATH != SITECOOKIEPATH )
    559                 setcookie(AUTH_COOKIE, $cookie, $expire, SITECOOKIEPATH, COOKIE_DOMAIN);
     573                setcookie($cookie_name, $cookie, $expire, SITECOOKIEPATH, COOKIE_DOMAIN, $secure);
    560574}
    561575endif;
    562576
     
    569583function wp_clear_auth_cookie() {
    570584        setcookie(AUTH_COOKIE, ' ', time() - 31536000, COOKIEPATH, COOKIE_DOMAIN);
    571585        setcookie(AUTH_COOKIE, ' ', time() - 31536000, SITECOOKIEPATH, COOKIE_DOMAIN);
     586        setcookie(SECURE_AUTH_COOKIE, ' ', time() - 31536000, COOKIEPATH, COOKIE_DOMAIN);
     587        setcookie(SECURE_AUTH_COOKIE, ' ', time() - 31536000, SITECOOKIEPATH, COOKIE_DOMAIN);
    572588
    573589        // Old cookies
    574590        setcookie(USER_COOKIE, ' ', time() - 31536000, COOKIEPATH, COOKIE_DOMAIN);
     
    604620 */
    605621function auth_redirect() {
    606622        // Checks if a user is logged in, if not redirects them to the login page
    607         if ( (!empty($_COOKIE[AUTH_COOKIE]) &&
    608                                 !wp_validate_auth_cookie($_COOKIE[AUTH_COOKIE])) ||
    609                         (empty($_COOKIE[AUTH_COOKIE])) ) {
    610                 nocache_headers();
    611623
    612                 wp_redirect(get_option('siteurl') . '/wp-login.php?redirect_to=' . urlencode($_SERVER['REQUEST_URI']));
    613                 exit();
     624        if ( is_ssl() || (defined('FORCE_HTTPS_LOGIN') && FORCE_HTTPS_LOGIN) )
     625                $secure = true;
     626        else
     627                $secure = false;
     628
     629        // If https is required and request is http, redirect
     630        if ( $secure && !is_ssl() ) {
     631                if ( false !== strpos($_SERVER['REQUEST_URI'], 'http') ) {
     632                        wp_redirect(str_replace('http://', 'https://', $_SERVER['REQUEST_URI']));
     633                        exit();
     634                } else {
     635                        wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
     636                        exit();                 
     637                }
    614638        }
     639
     640        if ( wp_validate_auth_cookie() )
     641                return;  // The cookie is good so we're done
     642
     643        // The cookie is no good so force login
     644        nocache_headers();
     645
     646        $login_url = get_option('siteurl') . '/wp-login.php?redirect_to=' . urlencode($_SERVER['REQUEST_URI']);
     647
     648        //  Redirect to https if connection is secure
     649        if ( $secure )
     650                $login_url = str_replace('http://', 'https://', $login_url);
     651        wp_redirect($login_url);
     652        exit();
    615653}
    616654endif;
    617655
  • wp-includes/script-loader.php

     
    137137                        $this->add( 'upload', '/wp-admin/js/upload.js', array('jquery'), '20070518' );
    138138                        $this->add( 'postbox', '/wp-admin/js/postbox.js', array('jquery'), '20080128' );
    139139                        $this->localize( 'postbox', 'postboxL10n', array(
    140                                 'requestFile' => get_option( 'siteurl' ) . '/wp-admin/admin-ajax.php',
     140                                'requestFile' => admin_url('admin-ajax.php'),
    141141                        ) );
    142142                        $this->add( 'slug', '/wp-admin/js/slug.js', array('jquery'), '20080208' );
    143143                        $this->localize( 'slug', 'slugL10n', array(
    144                                 'requestFile' => get_option( 'siteurl' ) . '/wp-admin/admin-ajax.php',
     144                                'requestFile' => admin_url('admin-ajax.php'),
    145145                                'save' => __('Save'),
    146146                                'cancel' => __('Cancel'),
    147147                        ) );
  • wp-settings.php

     
    307307
    308308/**
    309309 * It is possible to define this in wp-config.php
     310 * @since 2.6
     311 */
     312if ( !defined('SECURE_AUTH_COOKIE') )
     313        define('SECURE_AUTH_COOKIE', 'wordpress_sec_' . COOKIEHASH);
     314
     315/**
     316 * It is possible to define this in wp-config.php
    310317 * @since 2.3.0
    311318 */
    312319if ( !defined('TEST_COOKIE') )
  • wp-admin/admin.php

     
    2626
    2727wp_reset_vars(array('profile', 'redirect', 'redirect_url', 'a', 'popuptitle', 'popupurl', 'text', 'trackback', 'pingback'));
    2828
    29 wp_admin_css_color('classic', __('Classic'), get_option( 'siteurl' ) . "/wp-admin/css/colors-classic.css", array('#07273E', '#14568A', '#D54E21', '#2683AE'));
    30 wp_admin_css_color('fresh', __('Fresh'), get_option( 'siteurl' ) . "/wp-admin/css/colors-fresh.css", array('#464646', '#CEE1EF', '#D54E21', '#2683AE'));
     29wp_admin_css_color('classic', __('Classic'), admin_url("css/colors-classic.css"), array('#07273E', '#14568A', '#D54E21', '#2683AE'));
     30wp_admin_css_color('fresh', __('Fresh'), admin_url("css/colors-fresh.css"), array('#464646', '#CEE1EF', '#D54E21', '#2683AE'));
    3131
    3232wp_enqueue_script( 'common' );
    3333wp_enqueue_script( 'jquery-color' );