JSフィンガープリントは、 fingerprint2 のようなライブラリを使用してクライアント側で計算されます。
私の質問は、ajaxを介してこの値を送信すると、ユーザーはわずかな労力でこの値を偽造でき、正当なサーバーコードによって解釈される偽のPOSTリクエストを作成できるということです。
私の質問は、これが発生する可能性がある場合、ブラウザのプロパティを変更することなく、このライブラリを簡単にバイパスできることです(ブラウザのフィンガープリントが変更されます)。
私の解釈は正しいですか?その値の整合性をどのように保証できますか?
あなたはできません、そして私はそれについて本当に心配しません。
ルール番号1:ユーザーのコンピューターからのすべての入力は偽造される可能性があり、100%に依存することはできません。
必要に応じて、 piwikデバイス検出器 としてライブラリを使用したサーバーサイドフィンガープリントを使用してデータを照合することもできますが、理由もなく頭痛の種になります。
あなたを訪問しているユーザーの90%は、あなたが何をしているのか見当がつかず、信頼できるデータを提供します。彼らはアドブロックさえ持っていません。彼らはあなたに信頼できるデータを提供します。
訪問者の9%がアドブロッカーを持っている可能性があり、アドブロッカーはそれらのajaxリクエストをブロックする場合とブロックしない場合があります。彼らはあなたが彼らのプライバシーを尊重することを望みます、そうすることであなたは彼らを顧客として保ちます。 1%は、これらのajaxリクエストが何をするのかを知っているかもしれませんが、訪問するすべてのWebサイトのコンソールをわざわざ検査することができないため、わかりません。その1%の1%は、ブラウザコンソールを覗いて、ブラウザのフィンガープリントを理解する可能性があります。
その1%の1%が指紋コードを盗みます。 1%の1%の別の1%は、lulzのためだけにそれを偽造しようとし、それを忘れます。
つまり、気にしないでください。人々も気にしないでしょう。
しかし、本当に気にせず、自分自身に頭痛を与える必要がある場合:
gotcha.js?time=1283737273873
を使用してjavascriptリクエストを行い、サーバーサイドスクリプトを再度使用してインターセプトします。その後、ajaxを使用してページのコンテンツを更新できます。それ以外は、私は本当にあなたをお勧めすることができます:気にしないでください。努力する価値はありません。回避したい人は回避します。 JavaScriptを無効にし、そのスクリプトを除外し、サイトを続行または終了する前にすべてのCookieを消去し、登録済みのフォントプラグインを変更します...追跡されたくないものを追跡しないでください。気にしないグループに焦点を当てます。
その値の整合性をどのように保証できますか?
非常に簡単に答えるには、整合性を保護したいときはいつでも、送信されたメッセージのダイジェストも提供する必要があります。
ここでは、アリス(フロントエンド)、ボブ(バックエンドを使用して整合性の防御について説明します。 -))、およびTrudy(悪意のあるユーザー)
仮定:
アリスはPLAIN_TEXT
(ここではfingerprint)を含むパッケージをボブに送信したいと考えています。Trudyはパッケージを傍受したい悪意のある人物です。 PLAIN_TEXT
を変更します。
整合性に対する脅威:
Trudyは、PLAIN_TEXT
をキャプチャして、必要なものに変更できます。 (実際には、完全性に対する脅威が増える可能性がありますが、話は短くしたいと思います。)
パッケージの整合性を保護するためにアリスが実行する必要のある手順は次のとおりです。
PLAIN_TEXT
(text_digest
と呼ばれます)のダイジェストを取得します。PLAIN_TEXT
に添付し、新しいpackage
を取得します(package
= PLAIN_TEXT
+ text_digest
)package
を暗号化しますwhole_package_digest
)whole_package_digest
を添付し、それをボブに送信しますTrudyが理解後にできること:
オプション1.パッケージの暗号化を破ってみてください
オプション2.encrypted package
を省略して、独自のパッケージを添付してみてください。
ボブの側:
彼はpackage
を復号化し、PLAIN_TEXT
を取得します。 (他の誰もキーを持っていないので、彼はアリスがこのパッケージを送信したことを確認します)
彼は同じメソッドを使用してPLAIN_TEXT
のダイジェストを取得し(これをobtained_digest
と呼びましょう)、obtained_digest
をtext_digest
と比較し、それらが等しい場合はこれは、PLAIN_TEXT
が操作されていないことを意味します。
最後に、受け取ったパッケージのダイジェストを取得し、それをwhole_package_digest
と比較します。それらが等しい場合、それはTrudyが2番目のオプションで失敗したことを意味します。
上記のシナリオでは、整合性は機密性に大きく依存していることに注意してください。ただし、暗号化には対称方式と非対称方式の両方を使用できます。
下の画像では、言いたいことをより明確に説明しようとしました。