WordPress.org

Make WordPress Core

Changeset 19771


Ignore:
Timestamp:
01/27/2012 06:52:20 PM (9 years ago)
Author:
nacin
Message:

Provide a DB fallback for keys in wp_salt(). Fall back when any secret is used more than once. Change how we detect a localized 'put your unique phrase here' -- eliminate $wp_default_secret_key and introduce $wp_secret_key_default to be added during the localized build process, not by translators. fixes #19599.

Location:
trunk/wp-includes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/default-constants.php

    r19712 r19771  
    141141 */
    142142function wp_cookie_constants( ) {
    143     global $wp_default_secret_key;
    144 
    145143    /**
    146144     * Used to guarantee unique hash cookies
     
    156154
    157155    /**
    158      * Should be exactly the same as the default value of SECRET_KEY in wp-config-sample.php
    159      * @since 2.5.0
    160      */
    161     $wp_default_secret_key = 'put your unique phrase here';
    162 
    163     /**
    164156     * @since 2.0.0
    165157     */
  • trunk/wp-includes/pluggable.php

    r19726 r19771  
    13071307 * @link https://api.wordpress.org/secret-key/1.1/salt/ Create secrets for wp-config.php
    13081308 *
    1309  * @param string $scheme Authentication scheme
     1309 * @param string $scheme Authentication scheme (auth, secure_auth, logged_in, nonce)
    13101310 * @return string Salt value
    13111311 */
    1312 function wp_salt($scheme = 'auth') {
    1313     global $wp_default_secret_key;
    1314     $secret_key = '';
    1315     if ( defined('SECRET_KEY') && ('' != SECRET_KEY) && ( $wp_default_secret_key != SECRET_KEY) )
    1316         $secret_key = SECRET_KEY;
    1317 
    1318     if ( 'auth' == $scheme ) {
    1319         if ( defined('AUTH_KEY') && ('' != AUTH_KEY) && ( $wp_default_secret_key != AUTH_KEY) )
    1320             $secret_key = AUTH_KEY;
    1321 
    1322         if ( defined('AUTH_SALT') && ('' != AUTH_SALT) && ( $wp_default_secret_key != AUTH_SALT) ) {
    1323             $salt = AUTH_SALT;
    1324         } elseif ( defined('SECRET_SALT') && ('' != SECRET_SALT) && ( $wp_default_secret_key != SECRET_SALT) ) {
    1325             $salt = SECRET_SALT;
    1326         } else {
    1327             $salt = get_site_option('auth_salt');
    1328             if ( empty($salt) ) {
    1329                 $salt = wp_generate_password( 64, true, true );
    1330                 update_site_option('auth_salt', $salt);
     1312function wp_salt( $scheme = 'auth' ) {
     1313    global $wp_secret_key_default; // This is set for localized builds for versions > 3.4.0.
     1314
     1315    static $duplicated_keys;
     1316    if ( null === $duplicated_keys ) {
     1317        $duplicated_keys = array( 'put your unique phrase here' => true );
     1318        foreach ( array( 'AUTH', 'SECURE_AUTH', 'LOGGED_IN', 'NONCE', 'SECRET' ) as $first ) {
     1319            foreach ( array( 'KEY', 'SALT' ) as $second ) {
     1320                if ( ! defined( "{$first}_{$second}" ) )
     1321                    continue;
     1322                $value = constant( "{$first}_{$second}" );
     1323                $duplicated_keys[ $value ] = isset( $duplicated_keys[ $value ] );
    13311324            }
    13321325        }
    1333     } elseif ( 'secure_auth' == $scheme ) {
    1334         if ( defined('SECURE_AUTH_KEY') && ('' != SECURE_AUTH_KEY) && ( $wp_default_secret_key != SECURE_AUTH_KEY) )
    1335             $secret_key = SECURE_AUTH_KEY;
    1336 
    1337         if ( defined('SECURE_AUTH_SALT') && ('' != SECURE_AUTH_SALT) && ( $wp_default_secret_key != SECURE_AUTH_SALT) ) {
    1338             $salt = SECURE_AUTH_SALT;
    1339         } else {
    1340             $salt = get_site_option('secure_auth_salt');
    1341             if ( empty($salt) ) {
    1342                 $salt = wp_generate_password( 64, true, true );
    1343                 update_site_option('secure_auth_salt', $salt);
    1344             }
    1345         }
    1346     } elseif ( 'logged_in' == $scheme ) {
    1347         if ( defined('LOGGED_IN_KEY') && ('' != LOGGED_IN_KEY) && ( $wp_default_secret_key != LOGGED_IN_KEY) )
    1348             $secret_key = LOGGED_IN_KEY;
    1349 
    1350         if ( defined('LOGGED_IN_SALT') && ('' != LOGGED_IN_SALT) && ( $wp_default_secret_key != LOGGED_IN_SALT) ) {
    1351             $salt = LOGGED_IN_SALT;
    1352         } else {
    1353             $salt = get_site_option('logged_in_salt');
    1354             if ( empty($salt) ) {
    1355                 $salt = wp_generate_password( 64, true, true );
    1356                 update_site_option('logged_in_salt', $salt);
    1357             }
    1358         }
    1359     } elseif ( 'nonce' == $scheme ) {
    1360         if ( defined('NONCE_KEY') && ('' != NONCE_KEY) && ( $wp_default_secret_key != NONCE_KEY) )
    1361             $secret_key = NONCE_KEY;
    1362 
    1363         if ( defined('NONCE_SALT') && ('' != NONCE_SALT) && ( $wp_default_secret_key != NONCE_SALT) ) {
    1364             $salt = NONCE_SALT;
    1365         } else {
    1366             $salt = get_site_option('nonce_salt');
    1367             if ( empty($salt) ) {
    1368                 $salt = wp_generate_password( 64, true, true );
    1369                 update_site_option('nonce_salt', $salt);
     1326        if ( ! empty( $wp_secret_key_default ) )
     1327            $duplicated_keys[ $wp_secret_key_default ] = true;
     1328    }
     1329
     1330    $key = $salt = '';
     1331    if ( defined( 'SECRET_KEY' ) && SECRET_KEY && empty( $duplicated_keys[ SECRET_KEY ] ) )
     1332        $key = SECRET_KEY;
     1333    if ( 'auth' == $scheme && defined( 'SECRET_SALT' ) && SECRET_SALT && empty( $duplicated_keys[ SECRET_SALT ] ) )
     1334        $salt = SECRET_SALT;
     1335
     1336    if ( in_array( $scheme, array( 'auth', 'secure_auth', 'logged_in', 'nonce' ) ) ) {
     1337        foreach ( array( 'key', 'salt' ) as $type ) {
     1338            $const = strtoupper( "{$scheme}_{$type}" );
     1339            if ( defined( $const ) && constant( $const ) && empty( $duplicated_keys[ constant( $const ) ] ) ) {
     1340                $$type = constant( $const );
     1341            } elseif ( ! $$type ) {
     1342                $$type = get_site_option( "{$scheme}_{$type}" );
     1343                if ( ! $$type ) {
     1344                    $$type = wp_generate_password( 64, true, true );
     1345                    update_site_option( "{$scheme}_{$type}", $$type );
     1346                }
    13701347            }
    13711348        }
    13721349    } else {
    1373         // ensure each auth scheme has its own unique salt
    1374         $salt = hash_hmac('md5', $scheme, $secret_key);
    1375     }
    1376 
    1377     return apply_filters('salt', $secret_key . $salt, $scheme);
     1350        if ( ! $key ) {
     1351            $key = get_site_option( 'secret_key' );
     1352            if ( ! $key ) {
     1353                $key = wp_generate_password( 64, true, true );
     1354                update_site_option( 'secret_key', $key );
     1355            }
     1356        }
     1357        $salt = hash_hmac( 'md5', $scheme, $key );
     1358    }
     1359
     1360    return apply_filters('salt', $key . $salt, $scheme);
    13781361}
    13791362endif;
Note: See TracChangeset for help on using the changeset viewer.