web-dev-qa-db-ja.com

安全なエンドポイントにブラウザーのフィンガープリントを保存して送信するためのベストプラクティス

ユーザー認証に大規模なAPIとJSON Web Token(JWT)を使用しています。これらのトークンは、Luaコードを使用してフロントエンド(nginxプロキシ)で検証されます。次に、ブラウザーのフィンガープリントを使用してAPIをもう少し保護したいと思います。クライアントのフィンガープリントをJWTトークンに保存し、リクエストごとにこのフィンガープリントをクライアントからサーバーに渡すという考え方です。フィンガープリントが一致する場合は問題ありません。一致しない場合は、トークンが盗まれた可能性があるため、アクセスをブロックします。

ブラウザーのフィンガープリントを作成するには多くの方法があり、 Fingerprintjs2 は良い解決策のようです。私が知りたいのは、実際にどのようにこのフィンガープリントを保存する(または毎回その場で生成する)か、それをサーバーに送信する方法(Cookie、ヘッダー、取得または投稿パラメーターを使用)です。

1
Jacobian

指紋はセキュリティ以外の目的で使用されるため、そのような目的で使用しないでください。

Openrestyを使用しているので、実際にはセッションハンドラーにセキュリティを追加できます lua-resty-session には、セッションデータの保存場所に関していくつかの異なるオプションがあります。

pluggable-storage-adapters を読むと、ストレージアダプタの表が表示されます。

あなたの目的のために、Extra SecurityおよびHMACを実装します。

これにより、セッションデータがサーバー上に留まり、クライアントがセッションを失うことなく変更できないHMACトークンのみを持つことが保証されます。

さらに保護するために、認証Luaに小さなコードを追加して、IPソースが変更されたときにセッションが無効化されるようにすることができます。

これがあなたの質問に答えてくれることを願っています。

-私がこの日除けにしたコメントを含めます。

フィンガープリンティングは、特定のユーザーの確実性を高めるために使用できますが、他の識別手段を置き換えることはできません。

(税関職員によるIDチェック、パスポートがあなたを特定し、その番号(および自動システムによって行われるチェック)がドキュメントが本物であることを検証します。また、写真の画像を使用して、役員に対して自分自身を検証できます。 。したがって、全体として、真正性の主要なキャリア(パスポート)は1つしかありませんが、それを検証するために多くのチェックが行われます。

各チェックにより、その人が本人であると主張する人であるという確実性が増します。また、認証スキームの一部として、アイデンティティを証明するための追加情報として指紋を追加できます。しかし、一般的なものとして他の証明を置き換えたり、他の手段で簡単に偽造または抽出したりすることはできません。

1
LvB