セキュリティベストプラクティスガイド
FACEIOで顔認証、顔認証ログイン、ライブネスチェック、PIN保護、ドメイン制限、Webhookを使ったアカウント処理を本番環境で保護するためのガイダンスです。
最初から安全な顔認証を設計する
本番ユーザー向けに顔認証を有効にする前に、FACEIO Widget、fio.js、バックエンド制御を設定します。
認証フロー全体を保護する
顔認証はアカウントアクセス境界の一部です。FACEIOの設定、fio.js統合、ライブネス、PIN Codeルール、ドメイン制限、Webhook検証、アカウント復旧を1つの本番セキュリティモデルとして扱います。
これらのベストプラクティスは、許可されていないWidgetの使用、弱いPIN、提示攻撃、重複登録、バックエンド同期を対象とします。このガイドで扱う設定は、FACEIO Console ↗のApplication Managerで構成できます。
まずスタートガイドとfio.js 統合ガイドを確認し、次にこのページを本番向けセキュリティチェックリストとして使用してください。実際のユーザー向けに顔認証ログインを有効化する前に、すべての項目を確認します。実装に関する公開可能な質問はコミュニティフォーラム ↗へ投稿し、非公開のサポートリクエストは FACEIO Console ↗から送信してください。
本番セキュリティチェックリスト
FACEIOの顔認証を本番環境で公開する前に、クライアント側の統合が動くだけでなく、ウィジェットを含むアカウントセキュリティフローが完成していることを確認してください。
- オリジンを制限: ドメイン制限を有効にし、Public IDを公開する前にOriginまたはRefererヘッダーがないリクエストを拒否します。
- ライブネスを有効に保つ: ログイン、オンボーディング、アカウント復旧、追加認証などの重要なフローで顔のなりすまし対策を使います。
- PINの動作を計画: PIN確認を必須にする場面、失敗した試行の処理、アカウント復旧の方法を決めます。
- バックエンドイベントを連携: アカウント状態に影響する登録、認証、Facial ID削除イベントにはFACEIO Webhooksを使用します。
- 登録済みユーザーを保護: Facial IDの削除、アカウントとの関連付け解除、疑わしい認証試行への対応手順を文書化します。
- プライバシー管理を確認: エンドユーザーの登録を有効にする前に、このページとプライバシーのベストプラクティスガイドを確認してください。
FACEIOアプリケーションのセキュリティ設定
WebサイトまたはWebアプリのログインフロー、復旧手段、バックエンドの認可ルールに照らして、各FACEIOセキュリティ設定を確認してください。これらのオプションはFACEIO Application Manager ↗で設定できます。
登録時に弱いPINコードを拒否
登録時に、各ユーザーはFACEIOが認証中に要求できるPIN Codeを設定します。弱いPIN Codeを拒否することで、一般的な値がこの追加検証を弱めるのを防ぎます。
0000、1111、1234などの一般的なパターンを拒否する。- PINをパスワード、電話番号、生年月日、その他のプロフィール情報と分けます。
- PIN確認は管理された追加認証のシグナルとして使い、アカウント復旧やサーバー側認可の代わりにはしないでください。
弱いPINの拒否を有効にすると、登録を続ける前にユーザーはより強いコードを選ぶ必要があります。重要なWebサイトやWebアプリでは、この設定をPIN確認ポリシーと組み合わせてください。
ライブネスと顔のなりすまし対策
ライブネス設定: 認証フローで提示攻撃の検出が必要な場合に、この保護を有効にしてください。
有効にすると、写真、印刷画像、再生動画、モバイル画面、マスクなどを使ったプレゼンテーション攻撃や同様のなりすましを抑止できます。検出層だけで完全に保証できるとは考えず、疑わしいセッションの処理方法はアプリケーション側で決めてください。プレゼンテーション攻撃が検出されると、FACEIOは
fioErrCode.PAD_ATTACKエラーコードを返します。バックエンド側でアクセスを拒否し、再試行を案内するか、セッションを確認対象にできます。
Webサイトやモバイルアプリの生体認証では、ライブネス検出をユーザーフローとバックエンドのリスク判断に組み込んでください。アンチスプーフィング失敗を通常のログインエラーとして扱わないでください。
- アカウントアクセスや不正スコアに影響する場合は、イベントをサーバー側に記録します。
- どのアンチスプーフィングシグナルが失敗したかを攻撃者に詳しく伝えないでください。
- Webhooksとアプリケーション監視を使用し、繰り返される失敗と疑わしいアカウント活動を関連付けます。
アンチスプーフィングをドメイン制限、PINポリシー、レート制限と組み合わせ、カメラ、照明、デバイスの状態によって再試行が必要な正規ユーザーには明確な代替手段を用意します。
登録時に最低年齢を設定
このオプションを有効にすると、登録時に FACEIO の年齢推定結果を適用し、結果が設定した最低年齢を下回る場合に fioErrCode.MINORS_NOT_ALLOWED を返します。年齢推定は確率的な結果であり、正確な年齢や法的適格性を保証するものではありません。
年齢推定が適切な登録シグナルである場合にのみ、FACEIO Console ↗からこの設定を有効にしてください。必要な通知、同意、法務確認、別途必要となる年齢または適格性確認は、アプリケーション所有者の責任です。
認証時に常にPINコードを要求
重要なアプリケーションに推奨: 銀行、フィンテック、管理ポータル、アカウント復旧、支払いなどの重要なフローでは、この設定を有効にしてください。
認証時に、FACEIOは顔照合後にユーザーへPIN確認を求めることができます。この設定を無効にし、設定したポリシーで顔の一致が十分に明確な場合、追加のPIN入力なしでセッションを続行できます。
この設定を有効にすると、FACEIOが認証を完了する前にユーザーはPINを確認する必要があります。無効な試行が繰り返されると、FACEIOはフローを中止して適切なエラーコードを返します。アクセス、レート制限、アカウント復旧の判断はバックエンドが行います。
ユーザー間でPINコードの一意性を適用
登録時に各ユーザーは4桁以上16桁以下のPINを設定できます。PINの一意性を有効にすると、同じアプリケーションの別の登録ユーザーがすでに使っているPINをFACEIOが拒否します。共有された代替値が顔認証フローの弱点になるリスクを減らせます。
隠れた顔や一部を覆った顔を無視
デフォルトでは、隠れた顔、照明が不十分な撮影、部分的に覆われた顔は認識処理から除外されます。FACEIOははっきり見える顔を検出するまで別のフレームを要求します。アクセシビリティや運用上の明確な理由がない限り、本番の生体認証ではこの動作を厳格に保ってください。
Origin/Referer HTTPがない、または空のリクエストヘッダーを拒否
有効にすると、fio.jsのインスタンス化は、ブラウザーリクエストにOrigin ↗または Referer ↗ヘッダーがない場合に拒否されます。偽造または異常なリクエストに対する基本制御として扱い、ドメイン制限でアプリケーションのPublic
IDを利用できる場所を限定してください。
ウィジェットのインスタンス化を許可ドメインだけに制限
有効にすると、fio.jsのインスタンス化を許可したドメイン名に制限します。ほかのドメインはアプリケーションのPublic IDを使ってFACEIOの登録や認証を開始できません。本番公開前に、Application Manager ↗で許可ドメインの一覧を設定してください。
ウィジェットのインスタンス化を許可国だけに制限
有効にすると、fio.jsのインスタンス化を指定した国に制限します。サービス提供地域が限定されている場合や、地域要件に対応する場合に使用します。Application Manager ↗で、許可する国をISO 3166-1コードによって設定します。
Webhookを有効化
Webhooksを使うと、バックエンドがFACEIO Widgetからイベントを受け取り、新規登録、顔認証成功、Facial ID削除とアプリケーションの記録を同期できます。
Webhookイベントの詳細
イベントが発生すると、FACEIOは設定済みWebhook URLへHTTP POSTリクエストを送信します。イベントに応じてpayloadには次の情報が含まれます。
- 対象ユーザーの一意のFacial ID
- 性別と年齢(新規登録の場合)
- タイムスタンプ、イベント種別、IP情報
- 利用可能な場合は関連するpayload
Webhookの詳細
FACEIO Application ManagerでWebhookエンドポイントを設定し、アカウント状態を変更する前にサーバー側でWebhookイベントを検証します。
FACEIOのセキュリティ制御を設定
本番公開前にアプリケーションを作成し、許可ドメインを制限し、ライブネスとPINコード検証を設定して、フローで使うバックエンド制御を確認してください。