質問
コンテンツをユーザーにプッシュするサービスがあります。このコンテンツをユーザーに提供するために、顧客は自分のサイトにスクリプトを含めます。彼らのスクリプトは、それがどの顧客であるかを識別するために私のサーバーにトークンを送信しますが、ここに問題があります:誰かがユーザーのサイトからスクリプトをコピーすると、彼らはこのライブコンテンツを受け取ることができ、顧客は自分のサイトにいないユーザーに対して請求されます。それで、スクリプトが彼らのウェブサイトにのみ含まれることを確実にする方法はありますか?グーグルアナリティクスはこれをどのように達成しますか?
私には考えがありますが、これが完全に安全かどうかはわかりません。
- 顧客は、私のスクリプトを含めたいドメイン(サブドメインを含む)を教えてくれました。
- サーバーに保存する非常に小さなテキストファイルをユーザーに提供します。
- スクリプトが読み込まれると、window.location.hostをチェックし、ホスティングドメインのルートからテキストファイルをフェッチしようとします。
- ファイルが見つかり、その内容が顧客にファイルを提供したときに生成した内容と一致する場合、サービスをアクティブ化します。
これはうまくいくでしょうか?
window.locationを使用できない理由
私のスクリプトがwindow.locationを読み取り、それをURLに送信するとします。mydomain.com?token=ABC&locationhost=goodcustomer.com
現在、baduser.comの所有者はgooduser.comのアカウントを悪用したいので、gooduser.comのスクリプトを含めます。スクリプトはajaxリクエストをに送信するようになりましたmydomain.com?token=ABC&locationhost=badcustomer.com
badservice.comは、goodcustomer.comの所有者がサインアップしたときに入力したドメインではないため、これではサービスは開始されません。badcustomer.comの所有者は私のスクリプトを見て、URLを検証するためのリクエストを送信していることに気づき、自分のリクエストを送信するだけなので、これは簡単に回避できます。したがって、彼はにリクエストを送信しmydomain.com?token=ABC&locationhost=goodcustomer.com
ます。私のサーバーはこのリクエストを確認し、locationhostをトークンに関連付けられたドメインと比較し、goodcustomer.comのユーザー向けのコンテンツをbadcustomer.comのユーザーに提供し始めます。私のサーバーには、リクエストが自分のスクリプトによって送信されたのか、実際の顧客になりすまそうとしているユーザーによって送信されたのかを知る方法がありません。