私が今まで持っているもの:
- サーバー側のセッション
- Request.ServerVariables( "HTTP_USER_AGENT")&REMOTE_HOSTによって作成され、データベースに保存されたコンピューターの一意のID(md5)
しかし、この場合、他に何ができますか?ユーザーは引き続きログインの詳細を共有します:(
これは、ほとんどすべての作業で問題になります。誰かがプログラムを簡単にコピーできるソフトウェアから、単純な発券、発券デスクの前を人が通り過ぎるまでです。(私はチケット販売の立場で働いていましたが、お金を払わずに個人が入ってきました。) これは主に社会問題であり、コンピューティングの問題ではありません。私の経験では、社会問題 (人々) をコンピューターで解決しようとすることは、大部分が重要です。無駄。以下は、このトピックについて私が聞いたことの集大成であり、アドバイスが分類される傾向がある 2 つのカテゴリです。
問題を制御するようにしてください。
システムの悪意のあるユーザーを何らかの方法で特定して制御するようにしてください。これは、ソフトウェアの DRM であったり、チケット デスクの例では警備員であったりします。これは本質的にあなたが今しようとしていることです。
現在の方法で見られる問題は、複数のブラウザーをサポートしていないことです。私は日常的に複数のブラウザーや複数の Web サイトから閲覧しています。これがサービスの盗難を特定する方法である場合、誤検知が発生していないことを確認できますか?
問題を制御しようとする場合、私が聞いた最善の方法は、システムを正当に使用しているユーザーに影響を与えないようにすることです。DRM ソフトウェアを自分のマシンにインストールさせたり、靴を脱いで飛行機に乗るように要求したりして、正当なユーザーに苦痛を与えることは、ユーザーに迷惑をかけるだけであり、サービスの品質を低下させるだけです。通常の群衆に影響を与えることなく、問題のあるユーザーを特定する方法を見つけてみてください。Web サービスの場合、IP アドレスのブラックリスト (禁止) を選択することが効果的かもしれません。(ウィキペディアはスパマーや悪意のある編集者をこの方法で管理しており、スパム メールをこの方法で管理している人もいます。)
さて、推論の他の行:
問題を無視します。
これは、「ユーザーの邪魔をしない」という理想に由来します。ユーザーにとってできる限り良いサービスを提供し、ユーザーが現金を手放してもかまわない高品質のサービスを提供してください。言い換えれば、それを彼のお金に見合うものにしてください。もちろん、これは、あなたがまだ利益を上げていることを正直に言ってくれる十分な数の人々にかかっています. サービスを盗む者は、多くの場合、それに対してお金を払っていないだろうと主張する人もいます.
実際には、この 2 つの組み合わせがおそらく最も効果的な手段です。
2番目は機能しません。少なくとも 5 つの異なるデバイスからログインしています。顧客のハードウェアおよびソフトウェアのアップグレード サイクルに自分自身を結び付けたくはありません。
ユーザーの携帯電話番号を取得し、ログインするたびにワンタイム パスワードを SMS で送信します。共有するのが簡単すぎるため、電子メールは機能しません。しかし、ユーザー数が大幅に減少していることがわかります。これは本当に厄介なことです。
ユーザーがアカウント情報を共有できないようにする方法は、1 つの場所からの複数のログインを防ぐことです。そのため、ユーザーがログインすると、他のすべてのセッションがログアウトされます。
これは比較的簡単に行うことができます。ログイン時にランダムに生成される session_key などのフィールドをデータベース内の各ユーザーに関連付けます。その session_key をデータベースとユーザーのブラウザの Cookie に保存し、セッション キーが一致することを確認します。そうでない場合は、ユーザーをログアウトします。他の誰かがログインするたびに、新しいセッション キーが生成されるため、以前のすべてのセッションが非アクティブになり、ユーザーがログアウトされます。セッションに関連付けられているユーザーの IP アドレスなど、他の情報も追跡してみることができます。100% 確実というわけではありませんが、ほとんどのユーザーがアカウントを共有できなくなります。
IP アドレス、時刻、およびユーザー名をデータベース テーブルに記録します。サイト上の複数の IP からアクティブなユーザーのデータベースを確認し、それらのユーザーを禁止します。
または、そのユーザーのセッションがサーバー上に既に存在する場合は、ユーザーがアカウントにログインできないようにします。
これを防ぐ方法はありません。より困難にすることしかできませんが、マイナス面を考慮する必要があります。正当なユーザーが銃撃戦に巻き込まれることです。私があなただったら、問題の原因に取り組みます - ログイン情報を共有したくない理由 - そして代わりにそれを修正します. それをしないようにインセンティブを作ります。それを行うための利点を削除します。
ユーザーが何かを共有するのを止める唯一の方法は、その何かを共有できないようにすることです (少なくとも深刻なハッキングは必要ありません)。ただし、これにはプロジェクトに適していない可能性のあるハードウェアが含まれます。私は、秘密鍵を保持し、それらをコピーさせないハードウェア暗号トークンについて話しています。秘密鍵を含むトークンをユーザーに渡すと、ユーザーはトークン自体を他の人に渡すことができますが、コピーすることはできません。