いくつかの Web サービス (Steam、Facebook、Google など) が新しいブラウザー/新しい場所を検出できることに気付きました。場合によっては、電子メールで送信されたコードで検証する必要があります。
彼らはどのようにそれをしますか?彼らはクッキーを使用していますか?他の方法?それはどれほど信頼できますか?
同じブラウザー、同じコンピューター、同じおおよその場所など、ユーザーが「通常の」環境からログインしているかどうかを検出するにはどうすればよいですか?
いくつかの Web サービス (Steam、Facebook、Google など) が新しいブラウザー/新しい場所を検出できることに気付きました。場合によっては、電子メールで送信されたコードで検証する必要があります。
彼らはどのようにそれをしますか?彼らはクッキーを使用していますか?他の方法?それはどれほど信頼できますか?
同じブラウザー、同じコンピューター、同じおおよその場所など、ユーザーが「通常の」環境からログインしているかどうかを検出するにはどうすればよいですか?
ここにあなたが興味を持っているかもしれないいくつかのアイデアがあります...
すでに言ったように、それは正確な科学ではありません。セキュリティにとって重要なことを最初に保持し、これらすべてを「オプション」と見なす必要があります
さらに、推奨されるすべての「所要時間」は主観的なものであり、サイトへのアクセスがどれほど熱狂的であるか、およびデバイスの検出がどれほど強力であるかに応じて異なります。
デバイスの識別に役立つ要因は次のとおりです。
まず、access token cookie
と必ずしも異なるとは限りませんdevice id cookie
。実際、アクセス トークンを使用してブラウザを一意に識別することができます。トークン文字列がこのように頻繁に更新される場合でも、 1 セッション = 1 デバイスです。
代わりに、同じデバイスを 2 つ以上のブラウザーと見なしたい場合は、もちろん 2 つの異なる Cookie を使用する必要があります。1 デバイス = Chrome での 1 セッション + Firefox での 1 セッションなど。
第 2 に、Cookie は「決して」期限切れにならないようにする必要があります (数年で期限切れになるように設定します)。「remember-me」期間を期限切れにしたい場合は、コードでのみ行う必要があります。 これは、「決して」有効期限が切れず、実際には有効期限が切れたセッションに関連付けられている Cookie であるため、ユーザーが使用しているデバイスを識別するのに役立ちます! また、ユーザーがログアウトするときは、Cookie を削除せず、コード内でセッションを内部的に破棄してください。
ユーザーが IP を有効と見なす IP に変更するたびに、ログに記録する必要があります。これは、すべての IP をログに記録するためのテーブルが必要であることを意味しますsessionID | IP | lastActionDateTime | [other factors]+
。deviceID と IP の組み合わせを含む行が既に存在し、lastActionDateTime
たとえば 12 ~ 24 時間以内に作成された場合は、 を更新lastActionDT
します。それ以外の場合は、新しい行を作成する必要があります。それは、他の要因が変わらない限り。
GEOIP データベースを使用すると、ユーザーの位置を取得できます。これは信頼できるとは言えませんが、Google Maps API を使用して、最後の既知の位置と IP に関連付けられた新しい位置との間の距離を確認できます。または、GEOIP データベースが既に提供している場合LAT、LONG の値を使用すると、2 点間の距離を簡単に計算できます (詳細はこちらですが、多くの記事が Web で入手できます...実際には確認していませんが、問題ないはずです)。したがって、最後の既知の場所から 100 ~ 500 km 離れた IP を有効と見なすことができるとします。
3G IP では、いくつかの手順を実行しても変更される可能性があるため、いくつかの異なる IP でページ ビューを受信し、最近の以前のページ ビューが同じ IP で作成された場合、その IP は有効であると見なす必要があります。 ( ) の分前lastActionDT
に、もちろん他の要因の状態に応じて、最後の既知のものと同一である必要があります。
数時間または場合によっては数日間の非アクティブ状態の後に変更された IP を検出した場合、特に他の要因が一致する場合、またはより強力なセキュリティが必要な場合は、それが有効であると見なしてログインを許可することができます。このケースを次のように扱うことができます。
何日も非アクティブな状態が続いた後に変更された IP を検出した場合は、フォームを使用して再度ログインするように要求する必要があります。ここではセッションの有効期限が切れていますが、Cookie はまだそこにあり使用可能であるため、フォームの資格情報が有効な場合はdeviceID
、新しい を作成する代わりに有効期限を更新しますdeviceID
。
UA 文字列はさらにいくつかの追加チェックを提供しますが、ほとんどの場合に必ずしも関連するわけではありませんが、疑わしいバージョン管理の変更を検出するのに役立ちます (たとえば、同じセッションが最初に Chrome 27.0 ページビューを生成し、しばらくしてから Chrome 26.0 ページビューを生成した場合、どう思いますか? )。
したがって、これは非常に信頼性が低くなりますが、ご想像のとおり、いくつかのヒントが得られます。
同じコンピューター上の 2 つのブラウザーを同じ「デバイス」と見なしたい場合は、javascript を使用できます (もちろん、これはクライアント側のチェックであるため、セキュリティに関しては信頼できませんが、それでも役立ちます...たとえば、誰かがセッション Cookie を盗んだ場合、彼は追加のチェックに使用するこれらの値も偽造する必要があることを彼は知らないかもしれません:-P )。とにかく、window.screen
OS/コンピューターを一意に識別するのに非常に役立つこれらのプロパティが含まれています
window.screen.availWidth
&window.screen.availHeight
window.screen.availLeft
&window.screen.availTop
window.screen.width
&window.screen.height
...モバイル デバイスでは、オンザフライで値が反転する可能性があることに注意してください ( を確認してくださいwindow.screen.orientation
) 。
HTML5 Geolocation API を使用して別の追加チェックを行うこともできます (もちろん、クライアント側はセキュリティ上信頼できないため、そこにもありますが、以前の要素と連携して使用すると役立ちます) Geolocation API Spec
お役に立てば幸いです...
ウェス