1. ホーム
  2. security

[解決済み] REST API 呼び出しのセキュリティを確保するにはどうすればよいですか?

2023-01-03 02:52:44

質問

私は、バックエンドにいくつかの一般的なWebフレームワーク、例えば(rails、sinatra、flask、express.js)を使用して、restful Webアプリケーションを開発しています。理想的には、Backbone.jsでクライアント側を開発したいと思っています。私のjavascriptクライアント側だけがこれらのAPIコールと相互作用するようにするにはどうすればよいですか?私はそれらのAPIコールが公開され、それによって呼び出されることを望んでいません。 curl または単にブラウザ上でリンクを入力することによって呼び出されます。

どのように解決するのですか?

第一の原則として、APIがJSクライアントによって消費される場合、それが公開されていると仮定する必要があります。単純な JS デバッガーは、攻撃者が自分の選んだツールからバイト単位で同一のリクエストを送信できる状態にします。

とはいえ、もし私があなたの質問を正しく読むならば、これはあなたが避けたいことではありません。本当に起こってほしくないことは、JS クライアントが関与することなく API が (定期的に) 消費されることです。強制しないにしても、少なくともクライアントを使用することを奨励する方法について、いくつかのアイディアがあります。

  • あなたの API には、ある種の認証フィールド (たとえば、クライアントで計算されるハッシュ) があるはずです。そうでない場合、次のものを見てください。 このSOの質問 . JSクライアントに渡されるソルト(あるいはAPIキー)を、必ず セッション ベースでJSクライアントに与えられるソルト(あるいはAPIキー)を使うようにしましょう(ハードコードされていてもかまいません)。こうすることで、APIの未承認の消費者は、より多くの作業を強いられることになります。

  • JSクライアントをロードする際、いくつかのHTTPヘッダー(ユーザーエージェントが思い浮かびます)とIPアドレスを記憶し、それらが変更された場合、通常の容疑者のためのブラックリストを採用し、再認証を求めましょう。これにより、攻撃者はより徹底した下調べを再度行わなければならなくなります。

  • サーバー側では、直近の数回のAPIコールを覚えておき、別のコールを許可する前に、ビジネスロジックが今すぐ新しいコールを許可するかどうかをチェックします。これにより、攻撃者が自分のセッションの多くをサーバーとの 1 つのセッションに集中させることを拒否できます。他の対策と組み合わせることで、不正使用者を簡単に発見することができます。

必要なことを明確に言えなかったかもしれません。私はそれを 不可能 しかし、あなたはそれを非常に困難にすることができるので、手間をかける価値はないかもしれません。