バージョン6.8へのアップデートに伴いユーザーのパスワードハッシュが更新される件について

説明

WordPressバージョン6.8では、ユーザーのパスワードハッシュの生成方法が変更される。これに関連して、既存ユーザーのパスワードハッシュも更新されることがアナウンスされており、少し気になった。

パスワードハッシュの更新タイミング

パスワードハッシュが更新される件で一番気になったのが、更新されるタイミングである。というのも、WordPressでは「生」のパスワードは保持していないため、WordPress本体がバージョンアップされたタイミングでは更新できない。では、いつなのだろうか。

ログインページで入力されたパスワードに関連するのは、実際にユーザー認証を行っているwp_authenticate_username_passwordとwp_authenticate_email_password関数である(これらの関数は'authenticate'フィルターのコールバック関数として登録されている)。これらの関数のソースコードを見ていくと、各関数の終わる箇所に次のコードが見つかった。

	if ( wp_password_needs_rehash( $user->user_pass, $user->ID ) ) {
		wp_set_password( $password, $user->ID );
	}

	return $user;

バージョン6.8で定義された wp_password_needs_rehash関数によってパスワードハッシュの更新が必要かを判定し、更新が必要な場合は wp_set_password関数を使って(新しい)パスワードハッシュをセットしている。

整理すると、WordPressバージョン6.8にアップデート済みのサイトで、ユーザーがIDまたはメールアドレスとパスワードでログイン成功。その際にパスワードハッシュが旧来のものであればパスワードハッシュを更新するということになる。

すなわち、パスワードハッシュが更新されるのはパスワードを使ってログインに成功したタイミングに限定されるので、ログイン時に「ログイン状態を保持する」をチェックしてログイン中の場合や、GoogleやXなどの認証サービスを使ってログインした場合はパスワードハッシュが更新されることはないことがわかった。

パスワードハッシュを更新させない

さて、パスワードハッシュの更新が必要かを判定するwp_password_needs_rehash関数を見てみると、その返り値は'password_needs_rehash'フィルターで制御可能になっている。このフィルターを使えば、バージョン6.8にアップデートしたサイトでもパスワードハッシュを更新しないようにできる。コードは以下の通り。

add_filter( 'password_needs_rehash', '__return_false', 10, 3 );

実際にバージョン6.8にアップデートし、まだユーザーがログインしていない環境を整えて試したところ、意図した通りに動作し、パスワードハッシュは更新されなかった。

ちなみにパスワードハッシュが更新された場合は、wp_usersテーブルのuser_passカラムは次のような内容になる。

+----+-----------------------------------------------------------------+
| ID | user_pass                                                       |
+----+-----------------------------------------------------------------+
|  1 | $wp$2y$10$x.lU/aEUPocE4CQv0gQun.ls6GuC1Ou9gDDiyOsurWGTv3x4kVDac |
+----+-----------------------------------------------------------------+

更新されたユーザーのパスワードハッシュは、先頭が'$wp'から始まっている(詳しくは wp_hash_password関数を参照)。

ここでは、あくまでも一時的な対応としてパスワードハッシュを更新させない方法を紹介している。基本的にはパスワードハッシュは更新した方が安全であり、実施する場合は十分に理解して行ってほしい。


最終更新 : 2025年04月14日 16:11


お勧め

wp_save_post_revision(2024年1月10日 更新)

int | WP_Error | void wp_save_post_revision( int $post_id )
現状の投稿のリビジョンを作成する。

get_the_author_posts_link(2019年8月21日 更新)

string get_the_author_posts_link( )
投稿者アーカイブページのリンクを取得する。

get_year_link(2012年2月2日 更新)

string get_year_link( mixed $year )
年アーカイブのURLを取得する。

register_taxonomy(2022年6月1日 更新)

WP_Taxonomy | WP_Error register_taxonomy( string $taxonomy, array | string $object_type, array | string $args = array() )
タクソノミーを登録する。

wp_add_object_terms(2013年8月6日 更新)

mixed wp_add_object_terms( int $object_id, mixed $terms, mixed $taxonomy )
投稿情報などにタクソノミーを追加する。