4

私は会社の Chrome 拡張機能を開発および保守しており、各顧客にはコード内で一意の ID が割り当てられます。ID を使用して、ライセンス ステータスを判断し、サービスにログインしています (月額サブスクリプション料金による有料延長)。

これまでのところ、私たちは拡張ファイルを自社でホストしており、顧客の拡張機能ごとに固有の更新 URL を持っていました。これは素晴らしくシンプルです。当社の Web サイトにアクセスし、[インストール] をクリックすれば完了です。しかし、最新の Chrome リリースでは、ユーザーが CRX ファイルを chrome://chrome/extensions/ タブにドラッグ アンド ドロップして拡張機能をインストールする必要があるため、そのインストール手順は Google によって阻止されました。もちろん、拡張機能が Chrome Web Store から入手できない場合を除きます。これにより、問題が発生します。

  • ドラッグ アンド ドロップで CRX をインストールする必要はありません。Web ストアが必要です。
  • 拡張機能を更新するたびにメンテナンスが大変になるため、拡張機能の複数のバージョン (顧客ごとに 1 つ) を Web ストアに掲載したくありません。
  • 次の理由により、Web ストア ライセンスを使用したくありません。
    • OpenID ログインが必要です。
    • 学生ではなく、学校が請求書を支払う多くの学生がいる学校に延長を販売しています。
    • 支払い方法を 1 つのブラウザに固定したくありません。つまり、サーバーまたはサーバーを介してライセンスと支払いを維持できるようにしたいのです。
  • 数千人の学生がキーを入力しなければならないリスクが大きすぎるため、ユーザーにライセンスキーを入力させたくありません。また、最終的にライセンスキーを要求してクリアされる何らかのストレージ (cookie/localStorage) も必要です。再度入力します。

私の発言が完全に正しいとは限りません。

そうである場合、問題は、ID ごとに 1 つの拡張機能を公開する必要なく、Web ストアを通じて (一意の ID を使用して) 各顧客に拡張機能を調整できるかどうかです。

副次的な質問として、別の方法で問題を解決する可能性のある回答も受け付けます。

4

1 に答える 1

2

以下の回答については、アプリがホストされたアプリではなく、パッケージ化されたアプリであると想定しています。

現在の実装とかなり似ているソリューションがありますが、ユーザー向けの手順が 1 つ追加されています。学生ユーザーの場合、プロセスは次のように機能します。

  1. Web ストアからアプリをダウンロードします。アプリはまだ機能せず、起動しても「学校/教育機関から提供されたアクティベーション リンクをクリックしてください」というメッセージが表示されるだけです。
  2. サーバー(つまり、更新 URL をホストしていたサーバー) でホストされている のようなリンクをクリックしますhttps://myserver.com/activateapp.php?custid=123456789。あなたは、支援する機関ごとにそのようなリンクを 1 つホストします。そのリンクを学生に提供するのは機関の仕事です。このリンクは、アプリをアクティブにします。

実装の観点から、これがどのように機能するかを次に示します。

  1. サーバーでページ をホストしhttps://myserver.com/activateapp.phpます。サーバー側で、custidパラメーターが有効であることを確認してください。そうでない場合は、404 エラーを送信します。
  2. アプリにはhttps://myserver.com/activateapp.php、URL をスキャンして顧客 ID を選択するコンテンツ スクリプトが挿入されています。アプリが ID を見つけると、それを localStorage に保存します。無効な顧客 ID は 404 エラーを生成するため、コンテンツ スクリプトを実行すると、ページは 404 エラーではないことがわかります。したがって、有効な顧客 ID を読み取っています。
  3. アプリがサービスにクエリを実行するときはいつでも、localStorage に顧客 ID があるかどうかを確認します。存在する場合は、その ID を使用します。そうでない場合は、アプリがまだアクティブ化されていないというメッセージが表示されます。localStorageパッケージ化されたアプリは、アプリが独自のストレージを消去するようにプログラムされているか、ユーザーがコンソールから消去しない限り、決して消去されません。ストレージの消去が「偶発的に」発生することはありません。localStorage強力なブラウザ全体のデータ/キャッシュ パージでさえ、アプリや拡張機能ではなく、Web ページからのみ消去されます。

セキュリティを強化するために、顧客 ID を無作為に推測されたくない場合は、https://myserver.com/activateapp.php?custid=123456789&sig=2464509243. この追加のパラメーターは、サーバーによって検証された顧客 ID の変換 (理想的には、データベース内の ID に関連付けられた暗号署名または純粋にランダムな値) であり、誰も推測することはできません。の要求activateapp.phpがサーバーにヒットすると、有効な顧客 ID有効な対応する署名があるかどうかがチェックされます。もちろん、これは有効なリンクへの正当なアクセス権を持つ人々がそのリンクを許可されていない人々と共有するのを止めるものではありませんが、いずれにせよ、それはあなたの古いシステムに存在する脆弱性だったと思います.

于 2012-08-06T14:08:39.877 に答える