web-dev-qa-db-ja.com

セキュアにする方法RESTパラメータ操作用API?

安全な支払いAPIを開発しています。APIパラメータの操作を避け、同じAPIを再度起動したいと思います。たとえば、以下はAPI呼び出しです。

https://api.payment.com/wallet/transfer?from_account=123&to_account=456&amount=1

このAPI呼び出しが実行されると、十分な知識を持つ誰かが3つのパラメーターのいずれかを自分の利点に変更することにより、同じAPI呼び出しを実行できます。トランザクションごとに一時トークン(トランザクショントークン)を発行することを考えました。しかし、これも十分に聞こえません。

誰かがこれを達成するための最良の方法を提案できますか?

3
user34567

リクエストは、少なくともそれをどのように説明しているかにかかわらず、認証されていません。つまり、誰でもいつでもそのようなリクエストを送信してトランザクションをトリガーできます。

サンプルURLでHTTPSを使用しているため、TLSが指定されていると思います。これはもちろん持っている必要があります。

この問題からAPIを保護するには、次のメカニズムを実装する必要があります。

  1. Authentication:リクエストを送信するユーザーを認証する必要があります。利用可能な認証プロトコルは数多くあり、正しい選択はアーキテクチャによって異なります。基本認証のような単純なものでも、トークンベースのOAuth実装のようなより複雑なものでもかまいません。

  2. CSRF Preotection:繰り返しますが、アプリケーションアーキテクチャはわかりませんが、API呼び出しをトリガーするWebフロントエンドがある場合、CSRFが問題になる可能性があります。この場合、誤用を防ぐためにCSRF保護が実施されていることを確認する必要もあります。

  3. リプレイ保護: 1.と2.を実装した後、リプレイ攻撃のリスクがまだあるかどうかを評価する必要があります。その場合は、重複が検出されることを保証するスキームを実装する必要があります(たとえば、すべてのリクエストには追跡されるランダムなIDがあります)。

4
Demento