web-dev-qa-db-ja.com

アプリがウェブサイトからデータを取得しないようにするにはどうすればよいですか?

ユーザーがログインするとアクセスできるデータを含むWebサイトを実行しています。

他の誰かがAndroidアプリを作成して、ユーザーもそのデータにアクセスできるようにします。ユーザーは自分の資格情報を入力すると、アプリが別のWebサイトに接続します。このWebサイトにログインして、私たちのWebサイトからデータを取得します、AJAXリクエストを使用して(私はクエスチョンします)。

このアプリが機能しなくなるようにWebサイトへのアクセスを制限するにはどうすればよいですか? Same-Origin上のAccess-Conrol-Allo-Originは役立ちますか?それともX-Requested-Withヘッダーですか?おそらくドメインの制限や他の緩和策でしょうか?

1
Tech2K

アプリのサーバーバックエンドがリクエストを送信している場合

私が理解しているように、あなたのウェブサイトからデータを取得するリクエストは、問題のあるAndroidアプリのバックエンドとして機能するサーバーから来ています。あなたには多くの可能性があります:

  • サーバーのIPをブロックします。彼らがIPを変更した場合、これは猫とマウスのゲームになる可能性があるため、最高のソリューションではありません。
  • IPのレート制限。サーバーは1時間ごとに要求の負荷をかけるため、通常のユーザーに影響を与えない制限を設定できます。これが最も有望な解決策だと思います。
  • 同じIPに存在できるアクティブセッションの数を制限します。同じ企業ネットワークから複数のユーザーがログインしている場合など、同じIPに複数のセッションがある正当な場合があることに注意してください。
  • User-Agentがブラウザのように見えることを確認できます。簡単に回避できますが、フェンスのように泥棒が入らないようにしていても、敷地境界線がどこにあるかを明確に示しています。
  • WebサイトがよりAPIの場合、有効なリクエストが使用する必要がある他のカスタムHTTPヘッダーを使用できます。ただし、上記のポイントと同じ制限があります。

Access-Control-Allow-Originなどは、ブラウザが許可する要求を規制するため、ここでは役に立ちません。サーバーがリクエストを行っている場合は関係ありません。

ブラウザ、またはSOPに続くものがリクエストを送信している場合

同じOriginポリシーにより、要求が送信されるサーバーが(CORSを介して)これを許可するように明示的に構成されていない限り、あるOrigin上のサイトが別のOriginへの要求からの応答を読み取ることができません。

あなたのウェブサイトは一つのオリジンであり、アプリのブラウザが表示しているものは何でも別のオリジンです。したがって、これはデフォルトでブロックされます。

アプリがリクエストを送信している場合

これが事実なら、あなたは困っています。上記の最後の2つの箇条書き(User-AgentまたはカスタムHTTPヘッダー)を試すこともできますが、簡単に回避できます。だからあなたはここで運が悪いかもしれません。

3
Anders

Andersの回答に加えて、ログインエンドポイントで「 Invisible Captcha 」を使用することを検討してください。Googleはボットの検出/停止に優れています。

これは、ウェブサイトをこすり取ろうとする人を遅くするための単なる解決策ではないことに注意してください。

0
Ron