Skip to content

認証

ログインする人間は1人。マルチユーザー認証の仕組みは不要。WordPress と同様に、メールサーバー非依存で完結させる。

用途方式
マイページ (Web)パスワード → セッション Cookie (SQLite に保存)
CLI / APIBearer トークン (DB に保存)

パスワード保管

  • bcrypt ハッシュは DB の settings テーブルに保存する(password_hash キー)
  • メール送信機能は持たないため、パスワード忘れのリカバリは「murlog.reset ファイル + ワンタイムトークン」方式(後述)
  • これにより SMTP 設定や外部メールサービスへの依存を完全に排除

パスワードリセット

メール非依存のリセットフロー。物理的なファイルアクセス(FTP / SSH)が必要なため、サーバー管理者のみ実行可能。

  1. VPS / Docker: murlog reset コマンドを実行。トークン入りの murlog.reset ファイルが生成され、リセット URL が表示される
  2. レンタルサーバー (FTP のみ): murlog.reset ファイルを手動で作成し、中身にランダム文字列を書いて FTP でアップロード
  3. ブラウザで https://domain/admin/reset?token=<トークン> にアクセス → 新パスワード設定画面
  4. 設定完了 → DB の password_hash を更新、last_password_reset_at を記録、ファイル削除を試行

安全性:

  • murlog.reset ファイルの中身(トークン)を知らないとリセット画面にアクセスできない
  • ファイルの mtime が last_password_reset_at より古い場合は無視される(使用済みファイルの残留は無害)

レートリミット

IP 別のログイン試行制限。login_attempts テーブルで管理。

項目
閾値5 回失敗
ロック時間5 分
リセットログイン成功時に自動クリア
IP 取得trusted_proxy 設定で X-Forwarded-For 対応

ロック中は正しいパスワードでも拒否される (IP 単位)。1 人用サーバーなので NAT 巻き添えのリスクはない。

TOTP (二要素認証)

RFC 6238 準拠の TOTP。totp パッケージで自前実装 (外部依存なし)。

項目
アルゴリズムHMAC-SHA1
桁数6
期間30 秒
許容ウィンドウ前後 1 ステップ
秘密鍵サイズ20 バイト (160 ビット)
保存先settings.totp_secret

セットアップフロー:

  1. totp.setup → 秘密鍵生成 + otpauth:// URI 返却 (仮保存)
  2. 認証アプリで QR スキャン
  3. totp.verify → 6 桁コード検証 → 成功で有効化 (本保存)

ログインフロー:

  1. totp.status で TOTP 有効か確認 (public)
  2. 有効時: auth.logintotp_code パラメータが必須
  3. TOTP コード不正も失敗カウントに含まれる (レートリミット対象)

パスワード制約

項目
最小文字数8
最大文字数128
文字種小文字・大文字・数字・記号のうち 3 種以上

セットアップ・パスワード変更・パスワードリセットの全箇所で ValidatePassword を適用。