Webアプリケーションのライセンスキーソリューション、最良のアプローチは何ですか?


14

私はマネージャーからのリクエストに困惑しています。私は小さな新興企業で働いており、大規模な大企業のメンテナンス契約で固定料金のウェブアプリケーションを開発しました。大企業が最後の1秒間にしか請求書を支払わないという恐ろしい話を知って、私たちは、このWebアプリケーションのライセンスを取得することで自分自身を保護したいと考えました。

これはデスクトップアプリケーションで以前に行われたことを見てきましたが、これは内部でホストするWebアプリケーションになり、インターネットからアクセスできなくなります。

これを行うための最良のアプローチは何ですか?小さなフットプリントを持ち、配布したライセンスキーを更新する機能が必要です。

誰かが似たようなことをしましたか?私たちは完全に頭から離れていますか?誰より良い提案がありますか?


これを適切に行うには、かなりの時間が必要になります(または、彼らは単にそれを破ります)。Javaプログラムを保護するように設計された製品を購入するだけで、はるかに安くなります。それ以外の場合は、ライセンスをjavaバイトコードスニペットにして、プログラムが読み取ってから動作します。

それは私が恐れていたものであり、サードパーティのソリューションを検討しますが、私たちはすでに痛々しいほど予算を超えています。
maple_shaft

その後、支払い期限の2週間後に痛みを伴うほど遅くします。

@Torbjørn、LOL !! ^ _ ^このプロジェクトと同じくらい魅力的なのは、この会社との追加ビジネスを試みて損をする損失リーダーです。最高品質は最も重要です。同時に、ハニーポットを探している間、完全にねじ込まれたくはありません。
maple_shaft

@maple、悪いビジネスプランのようですね。その後、お金の収集は会計士に任せ、マルウェアの配信を検討しません。

回答:


9

このようなものを実装する方法はたくさんありますが、それほど難しくないはずの方法を次に示します。

ブラックリストに登録されたライセンスキーのハッシュを含むファイルをホストする、どこかに公開されているWebサイトが必要です。このファイルの管理方法はユーザー次第ですが、ファイル自体に必要なのは1行あたり1つのハッシュのみです。

その後、定期的に、ソフトウェアはこのファイルのダウンロードを開始し(ほとんどのサーバー側言語がこれを提供します)、インストールされたライセンスキーのハッシュを検索します。見つかった場合、アプリケーションは、ブラックリストが削除されるまで死ぬ必要があることを知っています。

これには、MD5または同様のものと秘密があれば十分です。あなたはより手の込んだものを取得し、アプリケーションにあなたのサイトにリクエストを送信させ、その場でデータベースでそれを調べますが、ファイル(私はおそらくうまくいけば短いリストになると思いますが)は小さいままであり、最も簡単な方法。

難しい部分は、アプリケーションを停止したままにすることです。結局のところ、これを内部のどこかに保存する必要があります。つまり、明白すぎる場合は簡単に破壊される可能性があり、あまり明白ではない場合でも、適切なテーブルを復元することで簡単に元に戻すことができます/ファイル。したがって、2番目の保護方法もお勧めします。

このメソッドは、テーブルまたはファイルに「LIVE」または「DEAD」(または十分に類似したもの)を格納しますが、再びハッシュします。これは、ソルトとタイムスタンプでハッシュ化する必要があります。アプリケーションのページが実行されるたびに、ハッシュ値の「LIVE」+ salt + timestampでこの値を確認し、有効なタイムスタンプ範囲(たとえば、1日、2日、1週間、1か月など)を許可します。範囲が広いほど、パフォーマンスが低下することに注意してください。)。一致する(または一致するものが見つかる)限り、アプリは動作します。そうでない場合、特殊ファイルまたはテーブルの値が「LIVE」であっても、タイムスタンプがしきい値を超えてしまうため、バックアップから復元しようとすると、デッドのままになります。

要約すると(これは、何らかの種類のチェックサムや他の方法など、ライセンスキーの有効性をチェックするプログラム的な方法があることを前提としています)。

  • CheckBlacklist
    • ライセンスキーをソルト付きハッシュに変換する
    • サーバーからブラックリストファイルをリクエストする
    • 私のハッシュはファイルにありますか?
    • YESの場合、「DEAD」のハッシュ+ salt +タイムスタンプを保存します(1日に切り捨てられ、時間+日+分を保存する必要はありません)
    • NOの場合、「LIVE」+ソルト+タイムスタンプのハッシュを保存(切り捨て)
  • IsKeyAlive
    • 「LIVE」+ salt +切り捨てられたタイムスタンプからハッシュを作成
    • DeadAliveハッシュを読み込む
    • 彼らは同意しますか?
    • はいの場合、私たちは生きています。TRUEを返します。
    • NOの場合、死んでいる可能性がありますが、タイムスタンプウィンドウ内にいる可能性があります。
      • タイムスタンプから1日を減算し、ハッシュを繰り返します。
      • 今同意しますか?
      • はい?TRUEを返す
      • タイムスタンプに日を追加し、ハッシュを繰り返します
      • 今同意しますか?
      • はい?TRUEを返す
    • この時点で、一致するタイムスタンプの範囲を超えています。FALSEを返します。(殺害アプリ)

さて、善は、これが失敗する可能性がある百万と一つの方法があることを知っています。考えられるすべての方法を検討し、信頼できるシステム(ブラックリストファイルをダウンロードできない場合にクライアントが正しいと想定するシステムを含む)を構築します。テスト、テスト、テストを行い、展開する前にさらにテストを行います。失敗した場合、クライアントの信頼が失われるためです。


+1非常に複雑な回答O_oの場合。私は間違っているかもしれませんが、これが非常に複雑である必要はないと思います。私はMicrosoft Officeを配布していません。これは、単一のクライアント用のカスタムビルドアプリケーションです。このアプリケーションをホストするサーバーが外部サービスと通信できない可能性があるという同じ問題がここに残っています。ここで暗号化、ハッシュ、ソルトが本当に必要な理由がわかりません。本当に必要なのは、実質的にキルスイッチです。
maple_shaft

ありがとう;-)ハッシュを使用することをお勧めする理由は、トラフィックを盗聴したり、クライアントでコード/テーブル/ファイルを見たりする人が誰に何が起こっているのかわからないようにするためです。ハッシュは、双方がそれに参加しなければ意味がありません。クライアントは、ハッシュが実際にライセンスキーの表現であることを理解することはほとんどありません。(平文で送信された場合は、すぐにわかります。)同様に、ブラックリストファイルで暗号化またはSSLを実行する必要性を減らします。ハッシュ自体はzipを意味します。
ケリーショット

サイドノート:特定のテーブル/ファイルの復元が難しすぎるとクライアントが認識すると信頼する場合は、アプリを実行するたびにチェックを削除することで複雑さをかなり減らすことができます。そうは言っても、何が起こっているのかを理解し、それを回避する方法を見つけるのに、誰かがそれほど長くはかからないでしょう。
ケリーショット

1
CheckBlacklist:license-server.example.com: no route to host今何?ライセンスサーバーは、将来的には存在しなくなる可能性もあります。また、20年経っても会社生き続けるは言わないでください。統計的にはありそうもないことです。
Piskvorは、建物の左の

1
独自のサーバーを使用しないなど、これを回避する方法はたくさんあります。AmazonやGoogleなどを使用してください。または、チェックに「信頼」を組み込んで、ホストが死んでいる場合にユーザーがアプリを引き続き使用できるようにします。投稿で述べたように、失敗する可能性のある方法は数百万あり、実際にこの種のチェックに反対する理由です。この種のチェックを考え出すよりも、むしろ顧客を信頼したいです。(ライセンスキーはそのまま使用します。ブラックリストに登録しますか?努力する価値はありません
。IMO

4

他の答えはすでに技術的な側面をカバーするのに良い仕事をしました。しかし、法的側面も考慮してください。

支払いを行わない場合、アプリをブロックする権利さえありますか?契約の中でこれを前もって言及しなかった場合、支払いが期限切れになったとしても、あなたはそれを行う権利を持たない可能性があります(あなたが販売したものを取り戻す権利を必ずしも持っていないなど)。また、多くの国には「コンピュータープログラムの操作」を禁止する特別な法律あります。あなたがすることはそのように考えられ、刑事責任にさらされることさえあります。

だから、私は最初に弁護士に相談して、お湯につかないようにすることをお勧めします。

最終的には、法制度に頼る方が良いかもしれません。彼らが支払いも交渉もしないなら、それが助けにならないなら、ただ訴えなさい。多くの国では、契約の状況が明確な場合、訴訟は比較的痛みがなく、安価です(ドイツでは、たとえば20ユーロ未満でマヘンベシェイドを入手できます)。


この種の結びつきは、私たちがナッツかどうかについての私の質問に答えることにつながります。私には選択肢がないという明確な印象を受けましたが、これは契約ではないのに上司が主張していることです。残念ながら、私はアメリカに住んで働いており、たとえあなたが正しいとしても大企業に就くことはできません。彼らは弁護士の軍隊を持っており、本当に望むなら私たちをビジネスから追い出すのに十分な長さの書類をすべて埋めます。
maple_shaft

法的チャネルの使用については、@ sleskeに同意します。契約が健全であることを確認し、条件に違反した場合は訴えます。または、少なくとも訴訟を起こす恐れがあります。私が大企業で見たところでは、彼らは訴えられたり契約に違反したりすることを避けるためにベンダーに非常に喜んで支払います。
RationalGeek

@maple_shaft:米国の法的状況についてはわかりませんが、法的状況があなたが描くほど絶望的ではないことを願っています。とにかく、これを実装するように言われたら、私は潜在的な問題を指摘したいと思います。それでも(もちろん、書面で)順調に進んでいる場合は、できる限りのことを行っています。
sleske

ライセンスの有効期限が切れるとアプリが役に立たなくなるという時間制限のあるライセンスシステムを使用しても問題はありません。多くの企業が大小さまざまなことをやっています。一例としてアドビです。
ジェームズスネル

2

内部でホスティングしている場合、これを出荷する他のソフトウェアとどのように違いますか?たとえば、デスクトップインベントリ表示アプリケーションを出荷している場合に何をするかを考え、それを実行します。


私は一般的に何をすべきかについてちょうど混乱していると思います。アプリケーションは、ライセンス番号を使用して外部Webサーバーに要求を送信することにより、ライセンスキーに対して夜間チェックを行う必要があると思います。応答は成功または失敗となり、アプリケーションのコンテキストレベル変数に保存されます。ライセンスキーが有効でない場合、アプリケーションは基本的に「オフ」になります。このようにして、必要に応じてこのライセンス番号を単純に「無効化」できます。
maple_shaft

この単純なライセンス認証ページはSSL暗号化されるべきだと思いますか?誰かがパケットスニファーを実装して有効なライセンス番号を取得できたとしても、それを使用するにはアプリケーションの分散コピーが必要になります。私の直接のクライアント以外の誰にも役立つとは想像できません。
maple_shaft

1

システムに依存します。Magnetoのような既存のフレームワークを拡張しましたか、それともアプリケーション全体をゼロから作成しましたか?後者であれば、ライセンス要件を組み込むのはそれほど難しくありません。短期ライセンスでアプリケーションを配信するだけです。短期ライセンスは、請求後45日で有効期限が切れ、その後永久ライセンスを付与します。

これは、ソースも引き継がないことを前提としています。:)


私たちはソースを裏返していません。ソースコードを管理し、必要に応じて定期的なリリースとバグ修正を配布します。
maple_shaft

1
@maple_shaft:まあ、請求書が支払われるまで修正や更新の発行を拒否する可能性が常にあります。メンテナンスは通常の支払い日で、最初の購入または継続的なものとして販売に組み込まれていると思われます(常にではありませんが、通常は毎年)。
バティーン

@Vatineをフォローアップするために、強力なライセンスがなかった以前のプロジェクトでは、支払いを引き出すためのレバレッジポイントとして欠陥を使用しました。一部の欠陥は完全な事故ではなかった可能性があります。
クリストファービブス

@maple_shaft-クライアントが1つしかない場合。解決策は簡単です。残高が0ドルでない限り、当該プログラムの更新を提供しないでください。
ラムハウンド

1

システムが内部でホストされている場合、リモートサーバーとの通信を含む上記のソリューションの多くは機能しない可能性があります。

代わりに、有効期限を含むライセンスファイルをプロジェクトに含めないでください。システムクロックが有効期限を超えると、システムは機能しなくなります。ファイルを保護するには、コンテンツを暗号化して改ざんを防ぎます。ユーザーが支払いを行うか、1年以上更新する場合、新しいライセンスファイルを送信します。

PHPを使用している場合、ユーザーはコードを簡単に編集できるので、どのようなセキュリティを導入しても、ユーザーは簡単にコードを削除できます。ASP.NETまたはその他のコンパイルされた言語を使用している場合、コードは変更できないため、これは問題になりません。


これは良い提案ですが、パッケージ化およびデプロイされたJavaアプリケーションです。新しいライセンスファイルを提供するということは、それをWARファイルに正しく挿入するか、すべてのユーザーにとって面倒なまったく新しいWARファイルを提供することを信頼することを意味します。彼らには山ほどの書類があり、サードパーティのアプリケーションの新しいリリースがあるたびに関与することによって組織内での存在を正当化する必要がある複数のITスタッフがいます。私はあなたの提案を軽視してはいないが、それは最も不快な提案ではないかもしれない。
maple_shaft

Javaのようなほとんどのコンパイル済み言語でも、jarは簡単にデコンパイル、更新、再コンパイル、そして戦争に含めることができると思います。
スダルシャン

1

(開示- ライセンスマネージャーシステムのプロバイダーであるAgilis Softwareで働いています)。

最も効果的なソリューションは、ライセンスリースを使用した自動製品アクティベーションを使用することです。すぐに使用できるようになります:

  • 顧客のライセンスを自動的にアクティブ化します。アクティベーション時に、各インスタンスはターゲットシステムの選択したパラメーターに自動的にロックされ、それらに設定したライセンス制限がアプリケーションに適用されます(機能の設定、全体的なトライアルまたはサブスクリプションの制限時間の設定など)。
  • 「リース間隔」を設定します。これは、1つのアクティベーションイベントの最大有効期間です。クレジットが疑われるお客様の場合は、たとえば2週間に設定できます。つまり、2週間ごとにアプリがバックグラウンドで自動的に「電話で帰宅」し、ライセンスが再検証されます。支払い期限が過ぎている場合、ホストされているサーバーでライセンスを無効にすると、次の電話ホームでの実行が停止します。
  • ターゲットシステムからのネットワーク接続がない場合、任意のWeb端末での暗号化されたファイルの交換によるユーザーセルフサービスのアクティベーションプロセスがあります。ユーザーがこの位置にいる場合は、リースの間隔を長くして、ユーザーへの不便さと支払いを受ける必要性のバランスを取ることをお勧めします。彼らが支払いをしたら、あなたは好きな限り、永久にリース間隔を作ることができます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.