PLUGIN : Rapls Passkey
Rapls Passkey wordpress.org から最新版をダウンロード
WordPress.org 公式リポジトリで公開している、パスキー(WebAuthn / FIDO2)認証プラグインの技術リファレンスページです。WordPress のログインを、パスワードの代わりに パスキー——Touch ID・Windows Hello・Face ID・セキュリティキー——で行えるようにします。パスワードレスで、フィッシングに強いサインインを実現します。別売の Pro アドオンを追加すると、クロスデバイス QR ログインやロール別のパスキー必須化などを上乗せできます。パスワードログインはそのまま残るので、有効化しても既存のログイン手段は失われません。
開発の経緯や実装の詳細については、開発者ガイドをご参照ください。
OVERVIEW : パスキーで安全になる仕組み
パスキーは、公開鍵暗号を使ったパスワードレスの認証方式です。登録時に、秘密鍵は端末(Touch ID / Windows Hello / Face ID やセキュリティキー)の中に安全に保管され、公開鍵だけがサイトに保存されます。ログイン時はサイトが送ったチャレンジに端末が署名し、サイトは保存済みの公開鍵で検証します。共有される「秘密」がネットワーク上を流れないため、盗み見・使い回し・漏えいのリスクがありません。
パスキーはサイトのドメイン(Relying Party ID)に紐づいて生成されるので、偽サイトに入力させられる余地がありません。これが「フィッシング耐性」の中身です。生体認証や PIN はあくまで端末のロック解除に使われるだけで、その情報がサイトに送られることはありません。
INSTALLATION : 設置方法
動作要件
- WordPress 6.0 以上(最新版を推奨)
- PHP 8.2 以上
- HTTPS(localhost を除く) — HTTPS でないとブラウザが WebAuthn を拒否します
- Pro アドオンには、無料の Rapls Passkey 本体(0.12.0 以上)が有効であることが必要
セットアップ手順
- プラグインをインストール・有効化
- 初回セットアップチェックの案内に従い、HTTPS と Relying Party ID、セキュリティプラグインとの共存を確認
- プロフィール画面から自分のパスキーを 1 つ登録
- いったんログアウトし、登録したパスキーでサインインできることを確認
クイックスタート
- プロフィール画面 — 「パスキーを登録」から、この端末のパスキーを作成
- ログインページ — 「パスキーでサインイン」ボタン、またはユーザー名欄のオートフィルからログイン
- ショートコード / ブロック — 任意のページに
/パスキーとは ?
パスキーは、指紋・顔認証や端末のロック解除 (PIN) でログインできる、パスワード不要のしくみです。フィッシングに強く、パスワードの使い回しや漏えいの心配がありません。
を設置パスキーを管理するにはログインしてください。 - 設定画面 — reCAPTCHA v3・ログインレート制限・セッションセキュリティなどを必要に応じて調整
詳しい設定手順・運用ガイドは Free 版マニュアルをご参照ください:
FEATURES : 機能一覧
1. パスワードレスサインイン
パスワードを入力せずに、端末のパスキーでサインインします。
- パスワードレス・フィッシング耐性 — WebAuthn / FIDO2 に基づくサインイン。共有される秘密がネットワークを流れません
- 同一デバイスのパスキー — Touch ID / Windows Hello / Face ID を使ったプラットフォーム認証
- クロスデバイスサインイン — ブラウザ標準のパスキーフローで、手元のスマートフォンをスキャンしてサインイン(独自の QR 承認フローは Pro)
- ユーザー名不要のログイン — ボタンひとつ、またはオートフィル(Conditional UI)でサインイン
- パスワードとの併用 — パスワードログインはそのまま残り、既存の手段を奪いません
2. パスキーの管理
- 改名 — 登録後にパスキー名を変更。「iCloud Keychain」が 2 つ並んでもどちらを失効させるべきか分かります
- 一時停止・再開 — 修理中・社内に置き忘れた端末のパスキーを、削除せずに一時的に無効化。ログインには使えなくなりますが、資格情報は残るので後で再開できます
- サイト全体のパスキー一覧 — Users → Passkeys で、サイト上のすべてのパスキーを所有者・名前で検索。認証器・登録日時・最終使用・状態を一覧表示し、その場で一時停止・削除できます
- 認証器(プロバイダー)名の表示 — AAGUID から iCloud Keychain・Google Password Manager・Windows Hello・1Password・YubiKey などを判別して表示
3. ショートコードと Gutenberg ブロック
— ログアウト中の訪問者向けのパスキーサインインボタン。パスキーとは ?
パスキーは、指紋・顔認証や端末のロック解除 (PIN) でログインできる、パスワード不要のしくみです。フィッシングに強く、パスワードの使い回しや漏えいの心配がありません。
redirect(成功後の遷移先 URL)とlabel(ボタン文言)属性に対応— ログイン済みユーザーが自分のパスキーを登録・削除できる管理 UIパスキーを管理するにはログインしてください。- ブロックエディタでは「パスキーでサインイン」「パスキーの管理」ブロックとして利用可能。リダイレクト URL とボタン文言はエディタのパネルから設定できます
4. 2FA プラグインとの連携
Wordfence Login Security・Two-Factor などの二要素認証プラグインと併用できます。
- パスキーサインインは、それ自体がフィッシング耐性のある多要素認証なので、第 2 要素として扱われ、追加のチャレンジは行われません
- パスワードなど、パスキーより弱いログイン手段は、サイトの 2FA を通過してから完了します(メールマジックリンクやリカバリーコードで 2FA を迂回されないように)
- チャレンジは実際に第 2 要素を設定済みのユーザーにだけ表示され、
RAPLS_PASSKEY_BYPASSで解除できるので、締め出しは起きません
5. ログインの保護
- reCAPTCHA v3 — パスワードフォームにスコアベースの reCAPTCHA v3 を適用(シークレットキーは暗号化して保存)
- ログインレート制限 — 失敗したパスキー認証を IP 単位でカウントし、しきい値と時間窓を設定可能。成功でカウンターはリセット
- 初回セットアップチェック — HTTPS・Relying Party ID・セキュリティプラグインとの共存を確認し、管理者自身のパスキー登録まで案内するウィザード
- ユーザー列挙対策 — ユーザー名を含むログインオプション照会を IP 単位でスロットリング
- 緊急バイパス —
define( 'RAPLS_PASSKEY_BYPASS', true );でパスキー強制を一時解除(復旧後に削除)
6. 運用・管理機能
- WP-CLI 対応 —
wp rapls-passkey list / remove / statsでパスキーをコマンドラインから管理 - 監査ログ — 登録・削除・改名・サインイン・一時停止などのイベントを記録。CSV エクスポート(Excel 向け UTF-8 BOM 付き・数式インジェクション対策済み)
- Site Health チェック — HTTPS・WebAuthn ライブラリ・データベーステーブル・RP ID とセキュリティプラグインの共存を自己診断
- 採用状況ウィジェット — 登録済みパスキー数、パスキーを持つユーザーの割合、直近 30 日の活動を一覧表示
- 管理者による代理登録 — 事前設定したセキュリティキーの手渡しや対面セットアップのために、他ユーザーのパスキーを登録(既定はオフ・対象ユーザーの edit_user 権限が必要・本人にメール通知・監査ログに記録)
- プライバシー(GDPR)対応 — WordPress 標準の個人データエクスポート/消去と連携
- 完全に翻訳可能 — 英語ソース+日本語同梱(WordPress スタイルガイド準拠)
7. Pro アドオンが追加する機能
- クロスデバイス QR ログイン — PC に QR コードと 4 桁の確認コードを表示。スマホでスキャンし、パスキーで承認します(確認コードがリレー型フィッシングを防ぎます)。端末が離れていても動作します
- ロール別のパスキー必須化 — 指定したロールにパスキーを必須化し、段階的移行のための猶予期間を設定。最後の管理者・
RAPLS_PASSKEY_BYPASS・リカバリーコードが締め出しを防ぎます - 単回利用のリカバリーコード — パスキーが使えないときのブレークグラス
- メールマジックリンクログイン
- パスワードレス新規登録 — パスキーだけでアカウントを作成
- アダプティブ・ステップアップ — 危険なパスワードログイン(未信頼の端末+不明な場所)の後、または毎回のパスワードログインでパスキーを再要求
- アプリケーションパスワードの停止・「パスワードをお忘れですか?」の拒否 — パスワードレス運用のユーザー向け
- 信頼済みデバイスの管理
- ログイン後の登録プロンプト — パスキー未登録のユーザーに登録を促す
- 認証器ポリシー — FIDO Metadata Service(MDS)の認定チェック、AAGUID の許可/拒否リスト
- セキュリティ Webhook — Slack / Teams / 汎用 JSON
- 採用状況レポート — ダイジェスト・リマインダーメール、分析
- マルチサイト — ネットワーク全体のポリシーと共有 Relying Party ID
- 設定のエクスポート/インポート、拡張 WP-CLI
8. Free vs Pro
- Free : パスワードレスなパスキーサインイン(WebAuthn / FIDO2)、同一デバイス(Touch ID / Windows Hello / Face ID)+ブラウザ標準のクロスデバイスフロー、ユーザー名不要ログイン/オートフィル、パスワードとの併用、ショートコード+ブロック(リダイレクト・ラベル対応)、パスキーの改名・一時停止・再開、サイト全体のパスキー一覧(Users → Passkeys)、認証器名の表示、2FA プラグイン連携(Wordfence Login Security・Two-Factor)、reCAPTCHA v3+ログインレート制限、初回セットアップチェック、管理者による代理登録、監査ログ+ CSV エクスポート、Site Health チェック、採用状況ウィジェット、GDPR 連携、WP-CLI(list / remove / stats)、緊急バイパス、日本語同梱
- Pro : クロスデバイス QR ログイン(4 桁確認コード)、ロール別のパスキー必須化(猶予期間・締め出し防止)、単回利用リカバリーコード、メールマジックリンク、パスワードレス新規登録、アダプティブ・ステップアップ、アプリケーションパスワードの停止・「パスワードをお忘れですか?」の拒否、信頼済みデバイス管理、ログイン後の登録プロンプト、認証器ポリシー(MDS・AAGUID 許可/拒否)、セキュリティ Webhook(Slack / Teams / JSON)、採用状況レポート(ダイジェスト・リマインダー・分析)、マルチサイトのネットワークポリシー+共有 RP ID、設定エクスポート/インポート、拡張 WP-CLI
Pro 版の価格(先行販売・2026年12月31日まで)
- 1 サイトライセンス:¥5,980 ¥2,980(税込・50%OFF)
- 5 サイトライセンス:¥11,980 ¥5,980(税込・50%OFF)
買い切り(サブスクではありません)・1 年間のアップデートとメールサポート込み。🛡 14日間返金保証 — ご購入から 14 日以内なら理由を問わず全額返金します(特定商取引法に基づく表記)。
Free 版
Pro 版
SETTINGS : プラグイン設定画面
WordPress の管理画面「Rapls Passkey」から設定します。設定は複数のセクションに整理されています。
セットアップチェック
- HTTPS 配信の確認(localhost を除く)
- Relying Party ID(パスキーが紐づくドメイン)の確認
- 共存しているセキュリティプラグインの検出
- 管理者自身のパスキー登録への案内
WebAuthn の詳細設定
- タイムアウト
- ユーザー認証(required / preferred / discouraged)
- 認証器タイプ(platform / cross-platform)
- ユーザーごとのパスキー登録上限
ログインセキュリティ
- reCAPTCHA v3(サイトキー・シークレットキー。シークレットは暗号化して保存)
- ログインレート制限(試行回数・ロックアウト時間)
- セッションセキュリティ(管理者の「ログイン状態を保存する」の可否など)
- 二要素認証との連携(弱いログイン手段に対する 2FA チャレンジ)
通知・監査
- セキュリティ通知メール(登録・削除・新しい端末からのサインイン)
- ログイン後のパスキー登録プロンプト
- 監査ログの表示と CSV エクスポート
- 採用状況サマリー(登録率・合計)
ツール
- デフォルトにリセット(CSP セーフな確認・nonce 保護)
- 管理者による代理登録の有効化(Pro / フィルターで切り替え)
- Rapls Passkey Pro の紹介パネル(Pro 未導入時にこの画面にのみ表示)
WP-CLI : コマンドラインからの操作
パスキーの一覧
wp rapls-passkey list --user=admin
パスキーの削除
wp rapls-passkey remove <id>
採用状況の統計
wp rapls-passkey stats
FAQ : よくある質問
サーバー要件は?
WordPress 6.0 以上、PHP 8.2 以上。パスキー(WebAuthn)はブラウザが HTTPS を必須とするため、localhost を除き HTTPS でのアクセスが必要です。Pro アドオンには、無料の Rapls Passkey 本体(0.12.0 以上)が有効であることが必要です。
パスキーを紛失してサインインできなくなったら?
パスワードログインはパスキーと併用できるので、いつも通りパスワードでサインインし、プロフィール画面からパスキーを削除・再登録してください。サーバー側からは WP-CLI でも管理できます(wp rapls-passkey list --user=admin / wp rapls-passkey remove <id>)。緊急時は define( 'RAPLS_PASSKEY_BYPASS', true ); を wp-config.php に追記すると、パスキーの強制を一時的に無効化できます(復旧後に削除してください)。
パスワードは廃止されますか?
Free 版では廃止されません。パスキーはパスワードと並んで追加され、既存のログイン手段はそのまま残ります。パスワードを段階的に廃止したい場合は、Pro 版のロール別必須化・アプリケーションパスワードの停止・「パスワードをお忘れですか?」の拒否などを組み合わせて、締め出しを防ぎながら移行できます。
パスキーはなぜフィッシングに強いのですか?
パスキーはサイトのドメイン(Relying Party ID)に紐づいて生成されます。偽サイトのドメインでは署名要求が一致しないため、そもそも入力させられません。共有される秘密がネットワークを流れないので、盗み見や使い回しも起きません。
既存のセキュリティプラグインと併用できますか?
できます。Wordfence・SiteGuard WP Plugin・CloudSecure WP Security などを検出して共存します。REST API をログインユーザーに限定するセキュリティプラグインの下でも、パスキー用エンドポイントだけを許可することでログインが動作し続けます。二要素認証プラグイン(Wordfence Login Security・Two-Factor)とも連携します。
クロスデバイスのサインインはできますか?
Free 版でも、ブラウザ標準のパスキーフローで、手元のスマートフォンをスキャンしてサインインできます(ブラウザがこの方式を提供している場合)。Pro 版では、PC に QR コードと 4 桁の確認コードを表示し、スマホのパスキーで承認する独自フローを追加します。確認コードがリレー型フィッシングを防ぐため、端末が離れていても安全に使えます。
マルチサイトに対応していますか?
Free 版は単一サイトでの利用を想定しています。ネットワーク全体のポリシーと共有 Relying Party ID は Pro 版で提供します。アンインストール時は、マルチサイト環境でも各サイトのテーブル・オプション・トランジェントをまとめて掃除します。
Content-Security-Policy を壊しませんか?
壊しません。独自の CSP ヘッダーを注入せず、インラインのイベントハンドラーも使いません。プロフィール画面の唯一のインラインスタイルも wp_add_inline_style() で登録しています。
アンインストール時のデータは?
アンインストール時に、パスキーの資格情報テーブル・オプション・ユーザーメタ・トランジェント・監査ログを削除します。マルチサイトでは全サイト分を掃除します。詳細は uninstall.php をご参照ください。
Pro 版との違いは?
Pro 版は別プラグインで、上位機能を追加します:クロスデバイス QR ログイン・ロール別のパスキー必須化・リカバリーコード・メールマジックリンク・パスワードレス新規登録・アダプティブ・ステップアップ・認証器ポリシー(MDS / AAGUID)・セキュリティ Webhook・採用状況レポート・マルチサイトのネットワークポリシーなど。Free 版だけでもパスワードレスサインイン・パスキー管理・ショートコード/ブロック・2FA 連携・reCAPTCHA v3・監査ログは完全に利用できます。
ADVANCED FILTERS : フィルターフック
functions.php にフィルターを設定して挙動をカスタマイズできます。
Relying Party ID を指定する(マルチサイトなど)
add_filter( 'rapls_passkey_rp_id', function( $rp_id ) {
// ホスト、または登録可能な親ドメインを返す
return 'example.com';
} ); ログインレート制限を調整する
add_filter( 'rapls_passkey_login_rate_max', function( $max ) {
return 10; // 時間窓あたりの試行回数(0 で無効化)
} ); パスキーログインを拒否する(統合ポイント)
add_filter( 'rapls_passkey/allow_login', function( $allow, $user ) {
if ( get_user_meta( $user->ID, 'is_blocked', true ) ) {
return false; // 認証クッキーを発行する前に拒否
}
return $allow;
}, 10, 2 ); 管理者による代理登録を有効化する(Pro なしでも)
add_filter( 'rapls_passkey/allow_admin_enrolment', '__return_true' );
ACTION HOOKS : アクションフック
署名カウンターの不一致(クローンの疑い)を検知する
add_action( 'rapls_passkey/counter_mismatch', function( $user_id, $credential_id ) {
error_log( "[Rapls Passkey] Counter regression for user {$user_id}" );
}, 10, 2 ); 他の 2FA プラグインのアダプターを登録する
add_filter( 'rapls_passkey/second_factor_providers', function( $providers ) {
$providers['my_2fa'] = new My_Two_Factor_Adapter();
return $providers;
} ); Pro 紹介パネルのリンク先を差し替える
add_filter( 'rapls_passkey/pro_url', function( $url ) {
return 'https://raplsworks.com/rapls-passkey-pro-ja/';
} ); CHANGE LOG : バージョン履歴
- 0.13.70PHP 8.2 未満のサーバーで、サイト全体が停止する不具合を修正しました。管理画面だけでなくフロントエンドも表示できなくなる状態でした。同梱する依存ライブラリが PHP 8.2 を必須とするため、オートローダーを読み込んだ瞬間に Composer のプラットフォーム検査が例外を投げます。それが WordPress のプラグイン読み込みの内側で起きるため、どこにも捕捉されず致命的エラーになっていました。今回からプラグインはまず PHP バージョンを確認し、8.2 未満なら管理画面に通知を出して自身だけを止め、サイトの他の部分には手を触れません。
Requires PHPヘッダーだけでは防げません。WordPress がこれを見るのは有効化時と更新提供時だけなので、あとから PHP を下げたサーバーや、Web サーバーより古い PHP で動く WP-CLI では素通りしていました。 - 0.13.69設定画面を 2 カラムにし、Rapls Passkey Pro の案内を追従するサイドバーへ移しました。これまではページ最下部、監査ログの表よりさらに下という、まず読まれない位置にありました。案内の文面も、機能の羅列から「何のための追加プラグインか」を先に述べる形に変えています。導入状況の数字の隣に「◯人がまだ登録していません」の 1 行を添え、プラグイン一覧の行に「設定」「Pro を見る」のリンクを追加しました。あわせて、7 日間使用しパスキーが 1 件以上登録されている場合に限り、レビューを一度だけお願いする通知を追加しています。表示はこのプラグイン自身の 2 画面のみで、閉じれば二度と出ません。いずれも無料版の機能を制限するものではなく、readme にも「無料版に上限・試用期間・ライセンスキーはない」と明記しました。
- 0.13.68プラグインディレクトリ掲載用のスクリーンショットを追加しました。プラグイン本体に変更はありません。
- 0.13.63〜0.13.67配布パッケージのすべてのファイルで、直接アクセスの防止が機能していませんでした。各ファイルは
if ( ! defined( 'ABSPATH' ) )で保護していますが、ビルドがこれを別の形に書き換えるため、WordPress の Plugin Check がガードとして認識できない状態でした。リポジトリ上は正しく見えていたぶん、気づきにくい不具合です。ビルドを経ても残る形に改めました。同じ理由で、コーディング規約の除外指定が対象の 1 行後ろを指しており、それが隠していた指摘(エスケープ漏れの例外メッセージ、CSV 出力のファイルハンドルなど)もあわせて修正しています。
このほか、Plugin Check の警告を残らず解消し、composer.jsonを再同梱、テスト専用ディレクトリを除外、Plugin URIとAuthor URIを修正しました。他のユーザーのパスキーを登録する機能は既定で有効になりました。実装済みでありながら無効で、Pro が有効にしていたためです。組み込みの機能をライセンスに依存させることはできません。日本語カタログの同梱もやめ、translate.wordpress.org からの配信に切り替えました。 - 0.13.54〜0.13.62プラグイン本体に変更はありません。リリース工程の検証を段階的に厳しくしたもので、いずれもパッケージには含まれません。依存ライブラリのツリーを記録した一覧と 1 ファイルずつ照合してからパッケージ化する、CI の全ジョブが成功したことを申告として要求する、レビュー用に配布するソースがそれ自身で同じパッケージを再ビルドできることを検証する——といった内容です。ビルドはどのコミットから作られたかを記録するため、内容が同一でも版数は再利用しません。
- 0.13.53監査ログの CSV 出力:先頭の空白に隠れた数式も無害化するようになりました。従来は 1 バイト目だけを見ていたため、
=+-@の前に半角スペース・タブ・ノーブレークスペース・BOM が付いたユーザー名は保護されずに書き出されていました。表計算ソフトは先頭の空白を読み飛ばしてから数式かどうかを判断します。あわせて、任意機能である reCAPTCHA について、接続先エンドポイントと Google の利用規約・プライバシーポリシーへのリンクを readme に明記しました。 - 0.13.47〜0.13.52プラグイン本体に変更はありません。同梱の E2E テスト手順、CI の証跡(どの実行がこのリリースを検証したか)、リリース工程の検証スクリプトの修正です。いずれもパッケージには含まれませんが、ビルドがコミットを記録する以上パッケージは別ファイルになるため、それぞれに版数を割り当てています。
- 0.13.46パッケージ修正:前回のパッケージに、配布すべきでない開発用ファイルが含まれていました。テストスイート、ビルドスクリプト、CI 設定、Composer のマニフェストです。動作上の害はありませんが、プラグイン ZIP に入るべきものではありません。本リリースは実行時ファイルのみで構成され、ビルドは完成したパッケージにそれらが含まれていないかを検査します。
- 0.13.45ビルドのみ:パッケージは git が追跡しているファイルから組み立てるようになりました。このリポジトリが無視しているローカルファイル(エディタのディレクトリ、ローカルの CI 設定など)が紛れ込むことはありません。プラグインのコードに変更はありません。
- 0.13.44ビルド由来情報のみ:前回のパッケージは未コミットの変更を含む作業コピーから作られており、記録されたコミットからは再現できませんでした。本リリースはクリーンなチェックアウトから作られ、そうでない場合ビルドは実行を拒否します。プラグインのコードに変更はありません。
- 0.13.43試行回数を返すとき、どれを返すのかを証明するようになりました。前回は「自分の番号までのすべて」を返しており、これも誤りでした。試行番号は位置であって所有者を示さず、次の時間枠で繰り返されます。そのためサインインが、まだ検査中の別リクエストの試行を取り消してしまい、上限を超える検証が起こり得ました。リクエストは自分が保持する 1 件だけを、トークンで証明して返します。過去の失敗はその時間枠のあいだ計上されたままです。あわせて、保留中のサインインを破棄する前に二要素の回答を検査するようにし、5 回目の正しい回答が通るようになりました。
- 0.13.42サインイン成功が、他のリクエストが実行中の試行まで取り消さないようになりました。従来はそのアドレスの試行カウンタ全体を消しており、検査に向かっている途中のリクエストが保持する枠まで解放していたため、次の到着がそれを再利用し、1 つの時間枠で上限を超える検証が可能でした。共有アドレスでは、1 人が繰り返しサインインするだけで他の全員の失敗記録が消えていました。成功時に返すのは自分が行った試行だけです。あわせて、ブラウザに二要素のトークンを渡せないときは二要素チャレンジを発行しない(第一要素を消費したまま完了できない画面に送らない)、二要素の回答は検査の前に計上する、という 2 点も修正しました。
- 0.13.41ビルドとパッケージングのみ:ソースが改変されているか確認できない場合、パッケージは「clean」ではなく「unknown」と記録します。コマンドラインで渡された別のパッケージングツールは固定されたものと照合し、検証バンドルは資格情報らしきものが含まれていればビルドを拒否します。
- 0.13.40ビルドが推測しなくなりました。ソースのメタデータが無ければ、現在時刻をパッケージに刻むのではなく停止して提示を求めます。ビルドを実行した機械の情報は成果物に一切入りません。
- 0.13.39配布パッケージが再現可能になりました。同じソースからビルドすれば、バイト単位で同一のファイルができます。中のタイムスタンプがすべて時計ではなくソース自身に由来するためです。1 つの版数が指すパッケージは常に 1 つです。
- 0.13.38整理のみ:0.13.36 から機能上の変更はありません。この番号は、1 つの版数が 1 つのパッケージだけを指すようにするために存在します。
- 0.13.37整理のみ:0.13.36 から機能上の変更はありません。前の番号がビルドスタンプだけ異なる 2 つのパッケージに使われていたため、番号とパッケージを 1 対 1 に戻すためのリリースです。
- 0.13.36チャレンジの裏付けとなるレコードを保存できなかった場合、サインインオプションが予期しないエラーではなく適切なエラーを返すようになりました。あわせてビルド時の検査で、結果を 1 件も出さなかった実行(途中で止まったファイル、テストの無いディレクトリ、落ちたプロセス)を沈黙ではなく失敗として扱うようにしました。
- 0.13.35サインインと登録は、裏付けとなる短命なレコードを保存できなかった場合に中止します。従来はキャッシュやデータベースの失敗時に、完了しようのないチャレンジをブラウザに渡していました。二要素への引き継ぎも同様で、途中まで進んだサインインを保存できなければその旨を伝えます(照合対象の無いコード入力画面に送りません)。配布パッケージ自体もビルド時にテストスイートへかけるようになり、出荷されるものが検査されるだけでなく実行されます。
- 0.13.34大文字・小文字だけが異なる場合でも、プラグイン更新がアカウントの保存済み識別子を修正するようになりました。この識別子は大文字小文字を区別しますが、データベースの既定の照合順序は区別しません。あわせて、その修正の両側でキャッシュを消去するため、永続オブジェクトキャッシュを使うサイトが古いコピーを返し続けることもありません。
- 0.13.33WebAuthn 識別子の 2 つの記録(レジストリ側とアカウント側)が食い違っているアカウントは、どちらを読んだかで異なる値を返し得ました。レジストリ側を正本とします。あわせて、想定内の衝突(別の登録が直前に取ったパスキー枠、レート制限の枠、既存のレジストリ項目)をサイトのエラーログに書かないようにしました。失敗ではないものがログを埋め、本当の失敗を見えなくしていました。
- 0.13.32「1 アカウントに WebAuthn 識別子は 1 つだけ」という監査の続きです。古い版が記録した識別子は初回利用時にレジストリへ登録され、それを読めない後続リクエストが 2 つ目を作ることはできません。プロフィールデータ側のコピーを失った識別子は、記録そのものから復元されます(登録が永久にできなくなることはありません)。登録処理はリクエストごとに識別子を 1 度だけ確定して持ち回るため、読み取りが書き込みに遅れるデータベースで 2 つの異なる答えを得ることもありません。
- 0.13.31パスキー確認が完了するようになりました。Pro のステップアップは危険なパスワードサインインをパスキー確認のために保留しますが、その確認に答えるパスキーサインインまで保留しており、最も厳格な設定では誰もサインインできませんでした。あわせて、アカウントが 2 つ目の WebAuthn 識別子を持てないようにし(既存の識別子を読めない場合は新たに導出せず登録を拒否)、更新後のテーブル更新を Pro の QR・サインアップの各儀式でも実行するようにしました。
- 0.13.30修正:管理画面を誰も開かずに更新されたサイト(バックグラウンド更新や WP-CLI)が以前のテーブル構成のまま残り、管理者がダッシュボードを開くまでパスキーサインインが拒否されることがありました。
- 0.13.29セキュリティ監査の続きで、いずれも「読み戻した値を信用しない」ことに関する修正です。ユーザー名でのサインインは、そのアカウントの有無やパスキーの有無を明かさなくなりました(ブラウザ自身のパスキー選択画面を使い、どんな名前にも同一の応答を返します)。サインイン中に一時停止・削除されたパスキーは、レプリカへ読み取りを送る構成でもそのサインインを完了しません。各ユーザーの WebAuthn 識別子は生成・保存ではなく導出されるようになり、同時初回登録・再試行・遅延するレプリカのいずれでも同じ値に到達します。リカバリーコードは、生成失敗を報告しながら旧コードを置き換え済みという状態になりません。
- 0.13.28コードベース全体のセキュリティ監査による修正です。セキュリティ(マルチサイト):ネットワークでスパム指定されたユーザー(またはその主サイトがスパム指定されている場合)が、パスキー・QR 承認・マジックリンク・リカバリーコードでサインインできていました。これらはログインクッキーを直接設定するため、該当の検査を通っていませんでした。あわせて、サインイン中に一時停止・削除された資格情報でのログインを確定時点で拒否、ユーザー名照会での存在漏えいを防ぐダミー応答、ネットワーク設定の共有 RP ID と Related Origins が実際に適用されるよう読み込み順を修正、保存できなかったリカバリーコードを表示しない、ステップアップの fail-open を解消、パスワードレスサインアップの識別子整合を確認、猶予期間が毎リクエスト再開しないよう修正、アンインストールと個人データ消去の取りこぼしを解消しました。
- 0.13.2710 回目の再レビュー修正:パスキー上限の制約をデータベース上で証明する検査が、自身の一時行を削除できたことも要求するようになりました。削除が失敗し続ける場合(書き込みは受け付けるが消せないデータベース)、上限は保証されていないものとして扱います。
- 0.13.269 回目の再レビュー修正(いずれも「読み取りを信用しない」ことと、その証明について)。試行枠やクォータ枠の確保は一切の読み取りを行いません。行を書けたか否か——一意な行名を使う以上、書けたことがその枠の保持を意味します。パスキー上限の制約検査を検証するテストは、制約がある場合と無い場合の両方でその検査を直接呼び、データベースが本当に重複を拒否するときだけ true を返すことを確認します。
- 0.13.258 回目の再レビュー修正(パスキー上限の安全確認と、可用性の修正 1 件)。上限を適用する前に、書き込みを受けるサーバー上で制約を証明します——1 つの枠を主張する行を 2 つ書き、2 つ目が拒否されることを要求します(同名のインデックスの有無を尋ねるだけでは不十分でした)。インデックスの形も検査し、UNIQUE かつ
(user_id, slot_no)をこの順で覆うことを要求します。上限を確認できない場合、登録は無防備に続行せず 503 で拒否します。可用性:書いたばかりの行がまだ見えない場合(遅延するレプリカ)、次の枠を試さずに停止します。 - 0.13.247 回目の再レビュー修正。すべての試行上限が、パスキー上限と同じ方法——プラグインが読み戻した数値の比較ではなく、データベースの制約——で保証されるようになりました。ログイン、二要素、リカバリーコード、マジックリンク、QR、サインアップの各上限は、一意性をデータベースが保証する番号付きの試行行を確保します。時間枠は時計に揃えた半開区間になり、すべてのリクエストが同じ枠に入ります。パスキー上限は、更新時に保存したフラグを信用せず、登録の瞬間にインデックスを検証します。更新が失敗した場合は完了として記録せず、次の管理リクエストで再試行します。実 MySQL・20 並列で検証済みです。
- 0.13.236 回目の再レビュー修正。ユーザーごとのパスキー上限とサインアップのクォータを、アプリケーション側のロックではなくデータベースの制約で保証するようになりました。各パスキーは新しい
UNIQUE (user_id, slot_no)の下で番号付きの枠を占め、上限内の枠しか提示されません。クォータは番号付きの行を予約し、読み戻して所有を確認するため、データベースセッションや助言ロック、影響行数に依存しません。ログイン試行の上限は、パスキー assertion(やリカバリーコード)の検査の前に消費します。実 MySQL・100 並列で検証済みです。上限 0(無制限・既定)では上限管理の処理そのものを行いません。 - 0.13.225 回目の再レビュー修正(並行性の正しさ、分離レベルとストレージエンジンへの非依存)。パスキー上限とクォータ予約は、トランザクション+行ロックではなく MySQL の名前付き助言ロック(
GET_LOCK)で直列化します。登録経路のすべての SQL を検査し、件数取得はデータベースエラー時に fail-closed とします(取得失敗が「上限未満」と読まれることはありません)。パスキーログインの REST ルートと Pro のリカバリーコードログインも共有のカウンタを使います。 - 0.13.214 回目の再レビュー修正(並行性)。パスキー上限は実データベースの行ロック(ユーザー単位行への短いトランザクション)の下で保証され、サーバーの分離レベルに関係なく正確に効きます。クォータの基礎処理は後片付けより先に自身の結果を読みます。セキュリティプラグインが REST を「ログイン済みのみ」に制限している場合の匿名パスキーログイン経路の再開放は、既定オフの明示的な管理設定になりました。
- 0.13.203 回目の再レビュー修正(並行性と REST の堅牢化)。パスキー上限は単一のアトミックな
INSERT ... SELECTで保証され、同時の 2 件が同時に上限を超えることはありません。共有のレート/試行カウンタはデータベースエラー時に fail-closed(読み書きの失敗は黙って許可せず、対象の操作をブロック)になりました。REST の再開放は、本物の 401「認証が必要」だけを解除します——WAF・IP 制限・メンテナンスモード等による 403 は解除しません。 - 0.13.192 回目の再レビュー修正(並行性・2FA・配布ビルド)。配布ビルドでは WooCommerce のグローバル
WC()(およびwc_*/WC_*)を接頭辞付与から除外します。ユーザー検証を伴わないパスキーログインは弱いログインとして扱い、サイトの 2FA が有効なら認証クッキーの発行前に 2FA へ送ります。第一要素後の 2FA 試行カウンタはアトミックな固定窓方式になりました。 - 0.13.18再レビューのための再提出。0.13.17 からコードの変更はありません(E2E マトリクスの実行結果のみ)。
- 0.13.17再レビュー修正:名前空間を接頭辞付与した配布ビルドが実際に起動するようにし、あわせて並行性と設定を堅牢化しました。接頭辞付きの同梱ライブラリが正しく読み込まれます(クラスマップをスコープ処理の前に生成し、後から再生成しないようにしました。従来は接頭辞付きクラスが落ちていました)。パスキーログインがサイトの 2FA を満たすのは、認証器がユーザー検証(生体認証・PIN)を行った場合だけになりました——所持だけでは第二要素になりません。WebAuthn ユーザーハンドルはアトミックなロックの下で発行され、reCAPTCHA の障害時挙動(fail-open / fail-closed)は明示的な設定になりました。
- 0.13.16配布のためのビルド堅牢化(実行時の挙動に変更はありません):同梱ライブラリ(web-auth/webauthn-lib、Symfony、Brick、spomky-labs、ParagonIE)を専用の名前空間へ書き換えるようになり、同じライブラリの別バージョンを積む他プラグインと衝突しません。
- 0.13.15ドキュメント:RP ID と Related Origins の共有は、ドメインをまたいで WebAuthn プロトコルを揃えるものであり、それだけで他サイトのパスキーが使えるようになるわけではないことを明確化しました。
- 0.13.14Related Origin Requests(クロスドメインのパスキー)が端から端まで動作するようになりました。サイトのオリジンが対象に含まれていれば、自身の登録可能ドメインでない共有 RP ID を使えます。
- 0.13.13WooCommerce「マイアカウント」のパスキーエンドポイントのリライトルールを、無効化・再有効化のサイクルで消去・再生成するようになりました。リライトルールが失われてもタブが 404 になりません。
- 0.13.12ログインとパスキー管理のショートコード/ブロックが、共有の DOM id ではなくインスタンスごとにコントロールを閉じるようになりました。同じページに複数配置しても干渉しません。登録ポリシーのフィルター
rapls_passkey/registration_policyはコンテキスト配列(owner_id、actor_id、context)も受け取ります。 - 0.13.11「個人データのエクスポート」が監査ログをページングするようになり、最初の 1000 行で止まりません。イベント数にかかわらず完全なエクスポートになります。
- 0.13.10ユーザーごとのパスキー上限がアトミックに保証されるようになりました。新しい資格情報を保存したあとに件数を再確認し、同時の 2 件が上限を超えた場合は挿入を巻き戻します。
- 0.13.9追加レビューによる堅牢化。パスキー登録は、その儀式が実際に対象としていたユーザーへ新しい資格情報を結び付けます(検証済み userHandle と再解決した所有者を定数時間で比較)。WebAuthn ユーザーハンドルは初回利用時にアトミックに作られ、同時の初回登録が同一アカウントに 2 つの異なるハンドルを作ることはありません。reCAPTCHA は Google に到達できないとき fail-closed に設定できます(既定は障害で締め出さないよう fail-open)。
- 0.13.8RP ID を Mozilla の Public Suffix List 全体(
data/public_suffix_list.datを同梱)で検証するようになりました。従来の短い拒否リストが見落としていた公開サフィックスも拒否します。 - 0.13.7追加レビューによる堅牢化(並行性と多要素の確からしさ)。署名カウンタは楽観的な compare-and-set で進め、確定できなければログインを拒否します——再生された assertion がカウンタをすり抜けることはありません。ログインオプションは「uv=required」を引き上げ方向のみで受け付けます(Pro のステップアップなどが多要素ログインにユーザー検証を要求できます。弱める方向には使えません)。
- 0.13.6追加の静的解析レビューから。WebAuthn 検証はサイトアドレス(home)と WordPress アドレス(site)の両オリジンを受け付けます(REST の同一オリジン検査と一致)。登録オプションは壊れた保存済み資格情報を行単位で切り離すため、1 件の読めないレコードが再登録を妨げません。REST の許可リストは「REST はログイン済みのみ」という既知の認証エラーだけを、自身のルートについて解除します。古い変更履歴は readme.txt のサイズ規定に収めるため
changelog.txtへ移しました。 - 0.13.5追加の静的解析レビューから。ログイン/登録ルートの同一オリジン検査がスキーム・ホスト・ポートまで比較するようになり、http と https、ポート違いが同一オリジンと見なされません。RP ID に公開サフィックス(
com、co.jpなど)を設定できなくなりました。REST 許可リストはパス区切り単位でルートを照合します。代替ログイン(マジックリンク/リカバリーコード)は、有効な 2FA プラグインが第二要素の状態を報告できないとき fail-closed になります。匿名の REST クライアントに内部例外の理由を返しません(WP_DEBUGが有効でもサーバーログのみ)。WordPress 7.0.2 で動作確認。 - 0.13.3設定画面に「Rapls Passkey Pro」紹介パネルを追加(Pro 未導入時のみ・この画面のみに表示。サイト全体のしつこい通知ではない)。すべての文言は翻訳可能で、リンクは
rapls_passkey/pro_url、パネル全体はrapls_passkey/show_upsellフィルターで制御。プロフィール画面の唯一のインラインスタイルをwp_add_inline_styleで付与するよう変更。日本語翻訳を完成。 - 0.13.2より深いコードレビューから:REST 許可リストを匿名ログインルートに限定し、認証済みの資格情報管理ルート(登録・削除・改名・一時停止)のクッキー nonce エラーを消さないように。
/login/optionsにユーザー名付き照会の IP 単位スロットリングを追加(オートフィルは影響なし)。reCAPTCHA 検証で action と score を必須化。チャレンジ消費をアトミックに。credential_idを varchar(512) に拡張。最後の管理者ガードがマルチサイトのスーパー管理者を考慮。ログイン/管理ブロックにリダイレクト URL とボタン文言のエディタパネルを追加。マルチサイトのアンインストールが全サイトを掃除。 - 0.13.10.10.0〜0.13.0 のコードレビューから:パスキー登録済みでアップグレードしたサイトにはセットアップチェック通知を出さないように。uninstall.php がセットアップチェックのオプションも削除。
- 0.13.0初回セットアップチェックを追加。HTTPS で配信されているか、どの Relying Party ID に資格情報が紐づくか——パスキーが機能するかを実際に決める 2 つの問いにウィザードが答え、共存するセキュリティプラグインを注記し、管理者自身のパスキー登録まで案内。設定画面の「セットアップチェック」から後からも到達できます。
- 0.12.0パスキーを削除せずに一時停止できるように。修理中・社内に置き忘れた端末を、資格情報を壊さずにログインから外せます。Users → Passkeys にサイト全体のパスキー一覧を追加(所有者・名前で検索、認証器・登録日時・最終使用・状態を表示、その場で一時停止・削除)。管理者が他ユーザーの代理でパスキーを登録できる機能(既定はオフ・edit_user 権限が必要・本人にメール通知・監査ログに記録)。
- 0.11.0登録後にパスキーを改名できるように(プロフィール画面と
ショートコード)。所有者のみ・監査ログに記録。パスキーを管理するにはログインしてください。 - 0.10.0二要素認証プラグインが、パスキーより弱いログイン(メールマジックリンク・リカバリーコード)もカバーするように。これらは 2FA チャレンジ画面で止まり、サイトの 2FA プラグインがコードを検証してから完了します。パスキーサインイン(QR クロスデバイス・パスキー新規登録を含む)は、それ自体がフィッシング耐性の MFA なのでチャレンジされません。
RAPLS_PASSKEY_BYPASSで解除可能。 - 0.9.7ログインレート制限が厳しすぎた問題を修正:失敗したパスキー認証のみをカウント。オートフィル用の
/login/optionsはカウント対象外に。設定画面に「デフォルトにリセット」ボタンを追加。 - 0.9.6成功したパスキーログインをレート制限にカウントしないように。ログイン試行回数・ロックアウト時間を設定画面で調整可能に。「セッションセキュリティ」設定を追加。
- 0.9.5フォローアップのレビュー修正:
/login/optionsは Origin も Referer も無いリクエストを拒否。管理者は常に非永続セッション、というルールをフィルター後に再適用。mbstring 非搭載環境向けの substr フォールバック。 - 0.9.4外部レビューから。パスキーログインが「ログイン状態を保存する」を尊重(既定オフ)、管理者は永続クッキーを受け取らない。全サインイン経路を単一のチョークポイント(AuthSession)に集約。他ユーザーのパスキー削除は対象ユーザーの edit_user 権限を確認。署名カウンターの退行を監査ログに記録し
rapls_passkey/counter_mismatchで公開。rapls_passkey_rp_idの値を検証。 - 0.9.3保存する reCAPTCHA シークレットキーを暗号化(バージョン付きタグ付き暗号文。libsodium、フォールバックに OpenSSL AES-256-GCM)。設定エクスポート時は復号してポータブルに。
- 0.9.2ハードニング:監査ログの CSV エクスポートで表計算ソフトの数式インジェクションを無効化(=・+・-・@ で始まるセルにアポストロフィを前置)。
- 0.9.1セキュリティレビューから:認証クッキーを設定する前に参照される
rapls_passkey/allow_login拒否フィルターを追加。アンインストール掃除にプラグインのユーザーメタを追加。 - 0.9.0国際化:ソース文字列をすべて英語化し、日本語を同梱翻訳として提供(
languages/rapls-passkey-ja.po/.mo)。テキストドメインはrapls-passkeyのまま。機能変更なし。 - 0.8.0「パスキーとは?」の簡潔な解説(JavaScript 不要のディスクロージャー)を、プロフィール画面・ログイン画面・ショートコードに追加。
rapls_passkey_learn_more_urlフィルターで独自ヘルプページを指定可能。 - 0.7.0LifterLMS・BuddyPress のログインフォーム連携を追加(各プラグインが有効なときだけパスキーボタンを表示)。標準の
login_formアクションを使うフォーム(bbPress・LearnDash など)は既にログイン画面のパスキーボタンでカバー。 - 0.6.0「採用状況」ダッシュボードウィジェットを追加。登録済みパスキー数、パスキーを持つユーザー数とその割合、直近 30 日の活動(ログイン/新規登録)をひとめで確認(管理者のみ)。
- 0.5.0
wp rapls-passkey stats(サイト全体の採用状況)を追加。既存のlist/removeと合わせて運用・監査を自動化。 - 0.4.0認証器(プロバイダー)名:パスキー一覧に「Authenticator」列を追加し、AAGUID から iCloud Keychain・Google Password Manager・Windows Hello・1Password・YubiKey などを判別して表示。登録通知メールにも記載。
rapls_passkey/authenticator_namesフィルターで拡張・上書き可能。 - 0.3.0セキュリティ通知メール(登録・削除・新しい端末からのサインイン)。GDPR:個人データのエクスポート/消去と連携し、ユーザー削除時に関連データを消去。Users 一覧に「Passkey」列。Ultimate Member / MemberPress / Easy Digital Downloads / Theme My Login のログインフォーム連携。WebAuthn 詳細設定(タイムアウト・ユーザー認証・認証器タイプ)。ログイン後のパスキー登録プロンプト。WooCommerce「マイアカウント」に Passkey タブ。監査ログの CSV エクスポート。Pro のパスキー新規登録を支える登録コア。Conditional Create(対応ブラウザで自動パスキー作成)。Site Health 連携。
- 0.2.0ショートコードと Gutenberg ブロックによるフロントエンド埋め込み(ログイン/パスキー管理)。ユーザーごとのパスキー登録上限。二要素認証プラグイン(Two-Factor / WP 2FA)との併用。REST API をログインユーザーに限定するセキュリティプラグイン下でも、パスキー用エンドポイントを許可して動作。CSP を壊さない設計。マルチサイト向けの
rapls_passkey_rp_id/rapls_passkey_rp_nameフィルター。 - 0.1.0初回スキャフォールド:プラグインブートストラップ・資格情報テーブル・依存関係チェック。パスキーの登録とログイン(同一デバイス・クロスデバイス・オートフィル)。WP-CLI 管理/復旧コマンドと緊急バイパス定数。設定画面・パスワードログイン向け reCAPTCHA v3・監査ログ。Wordfence / SiteGuard WP Plugin / CloudSecure WP Security などを検出して共存。
RELATED PAGES : 関連ページ
Free 版
Pro 版
その他
- プラグイン一覧
- Rapls Passkey 開発者ガイド – 開発の経緯・実装の試行錯誤・トラブルシューティング
- WordPress.org サポートフォーラム