web-dev-qa-db-ja.com

安全RESTユーザー登録なしのAPI

Node JSにAPIがあり、主にGETエンドポイントとクライアント側の単一ページアプリケーションを使用しています。

アプリケーションは、認証を必要とせずに開くことを目的としています。つまり、booking.comのように、ログインや登録をせずにホテルを閲覧できます。

誰でも私のエンドポイントにアクセスして生のJSONデータを取得したり、自分のアプリで私のエンドポイントを利用するアプリを作成したりできます。

エンドポイントをどのように保護できますか?たとえば、トークンベースまたはその他の署名を使用して、クライアントアプリのみを信頼します。

5

公開されている秘密を保護することはできません。クライアントに送信されたHTMLページにAPIキーがある場合、それらはもはや秘密ではありません。誰でもページを読んでキーを取得し、好きなように使用できます。

クライアント側でのエンコード、難読化、暗号化についても考えないでください。最新のブラウザーの開発者ツールを使用すると、ユーザーは実際のリクエストを確認でき、リクエストのキーを取得するだけです。アプリケーションが暗号化と改ざん防止機能を備えたバイナリであり、SSLと証明書のピン留めを使用している場合でも、特定のユーザーがキーを取得します。数秒から数日かかる場合がありますが、キーが漏洩します。

キーを保護するには、プロキシを使用します。キーを保持するサーバー側コンポーネントを作成し、バックエンドにアクセスすると、HTMLページ(またはアプリ、Java、その他のクライアントアプリケーション)がアクセスします。

そして、接続しているクライアントが自分のクライアントであるかどうかを実際に知ることはできません。でもMMOゲームプロデューサーはalternativeクライアントの処理に問題があります。一部の保護を回避するために使用されています。さらに困難にすることはできますが、攻撃者は保護を回避できます。

5
ThoriumBR