上司からの依頼に困りました。私は小規模な新興企業で働いており、かなり大きな会社の保守契約を締結して定額制のWebアプリケーションを開発しました。大企業が請求書を最後の1秒間だけ支払う方法についての恐ろしい話を知っていたので、支払われない場合はソフトウェアが機能しなくなるような方法でこのWebアプリケーションのライセンスを取得できるようにして、自分自身を保護することを決定しました。
これは以前にデスクトップアプリケーションで実行されたことがありますが、これは内部でホストするWebアプリケーションであり、インターネットからアクセスできません。
これを行うための最良の方法は何ですか?フットプリントを小さくして、配布したライセンスキーを更新できるようにしたいと考えています。
誰かが似たようなことをしましたか?私たちは完全に頭から離れていますか?誰かより良い提案がありますか?
このようなものを実装する方法はたくさんありますが、ここではそれほど難しくない方法を紹介します。
ブラックリストに登録されたライセンスキーのハッシュを含むファイルをホストする、どこかで公開されているWebサイトが必要です。このファイルをどのように管理するかはあなた次第ですが、ファイル自体に必要なのは1行あたりのハッシュだけです。
次に、ソフトウェアは定期的にこのファイルのダウンロードを開始し(ほとんどのサーバー側の言語がこれに対応しています)、インストールされているライセンスキーのハッシュを検索します。見つかった場合、アプリケーションはブラックリストが削除されるまでアプリケーションが停止することを認識しています。
これには、MD5または類似のものとシークレットで十分です。より洗練されて、アプリケーションにリクエストをサイトに送信させ、その場でデータベースで検索することもできますが、ファイル(私が想定しているものの場合、短いリストであることが望ましい)は小さいままであり、最も簡単な方法。
さらに難しいのは、アプリケーションを停止状態に保つことです。結局のところ、これを内部のどこかに保存する必要があります。つまり、過度に明白である場合は簡単に破壊される可能性があり、過度に明白でない場合でも、適切なテーブルを復元することで簡単に元に戻すことができます/ファイル。したがって、私は2番目の保護方法も提案します。
このメソッドは、「LIVE」または「DEAD」(または十分に類似した何か)をテーブルまたはファイルに格納しますが、再びハッシュされます。これは、ソルトとタイムスタンプでハッシュする必要があります。アプリケーションのページが実行されるたびに、ハッシュ値の「LIVE」+ salt + timestampでこの値を確認し、有効なタイムスタンプの範囲(たとえば、1日、2日、1週間、1か月など)を許可します。範囲が大きいほど、パフォーマンスが低下することに注意してください。物事が一致する(または一致が見つかる)限り、アプリは生きています。そうでない場合、特殊ファイルまたはテーブルの値が「LIVE」であっても、タイムスタンプがしきい値の範囲外になるため、バックアップから復元しようとすると、その値は引き続き無効になります。
要約すると(これは、何らかのチェックサムやその他の方法など、ライセンスキーのvalidityをチェックするプログラム的な方法があることを前提としています)。
さて、善はこれが失敗する可能性がある100万と1つの方法があることを知っています。考えられるすべての方法を検討し、信頼できるシステムを構築します(ブラックリストファイルをダウンロードできない場合にクライアントが正しいと想定する方法を含む)。テスト、テスト、テストを行い、展開する前にさらにテストを行います。問題が発生すると、クライアントの信頼が失われるためです。
他の答えはすでに技術面をカバーするのに良い仕事をしています。ただし、法的な側面も考慮してください。
彼らが支払わない場合、あなたは彼らのアプリをブロックする権利さえありますか?契約でこれについて前もって言及しなかった場合、たとえ支払いが失効したとしても、あなたはそれをする権利を持たないかもしれません(あなたが必ずしもあなたが売ったものを取り戻す権利がないというように)。また、多くの国には「コンピュータプログラムの操作」を禁止する特別な法律があります。あなたが行うことがそうであると見なされ、刑事責任にさらされる可能性さえあります。
ですから、まずは弁護士に相談して、お湯に浸からないようにしてください。
結局、法制度だけに頼るほうがいいかもしれません。彼らが支払わない場合は交渉し、それでも問題が解決しない場合は訴訟を起こしてください。多くの国では、契約状況が明確であれば、訴訟は比較的簡単で安価です(たとえば、ドイツでは Mahnbescheid を20ユーロ未満で取得できます)。
それらが内部でホストしている場合、これはあなたが出荷する可能性のある他のソフトウェアとどう違うのですか?たとえば、デスクトップの在庫表示アプリケーションを出荷する場合にどうするかを考えて、それを実行します。
システムが内部でホストされている場合、リモートサーバーとの通信を含む上記のソリューションの多くは機能しない可能性があります。
代わりに、有効期限が含まれているプロジェクト内にライセンスファイルを含めないでください。システムクロックが有効期限を超えると、システムは機能しなくなります。ファイルを保護するには、内容を暗号化して改ざんを防止します。ユーザーが支払いを行うか、1年間更新すると、新しいライセンスファイルが送信されます。
PHPを使用している場合は、ユーザーがコードをすぐに編集できるので、どのようなセキュリティを設定しても、ユーザーは簡単にアクセスしてコードを削除できます。 ASP.NETまたはその他のコンパイル済み言語を使用している場合、コードは変更できないため、これは問題にはなりません。
(開示-私は ライセンスマネージャー システムのプロバイダーであるAgilis Softwareで働いています)。
最も効果的な解決策は、ライセンスリースで自動化された 製品のアクティベーション を使用することです。箱から出してこれはあなたがすることを可能にします:
システムによって異なります。 Magnetoのような既存のフレームワークを拡張したり、アプリケーション全体をゼロから作成したりしましたか?後者の場合、ライセンス要件を組み込むことはそれほど難しくありません。アプリケーションを短期間ライセンスで提供するだけで、請求後45日で期限が切れ、後で永久ライセンスが付与されます。
これは、ソースもめくっていないことを前提としています。 :)