15

私は、いくつかの要件を持つ REST サービスに取り組んでいます。

  1. 安全でなければなりません。
  2. ユーザーがリクエストを偽造できないようにする必要があります。

私が現在提案している解決策は、次のようなカスタム Authorization ヘッダーを使用することです (これは、Amazon Web サービスが機能するのと同じ方法です)。

Authorization: MYAPI username:signature

私の質問は、署名を形成する方法です。ユーザーがサービスにログインすると、リクエストに署名するために使用できる秘密鍵が与えられます。これにより、他のユーザーが代理でリクエストを送信することはできなくなりますが、リクエストを偽造することはできなくなります。

このサービスを使用するアプリケーションは iPhone アプリケーションなので、アプリケーションに公開鍵を埋め込んで追加の署名を行うことができると考えていましたが、これは 2 つの署名が必要になるということですか?ユーザーキー用とアプリキー用ですか?

どんなアドバイスでも大歓迎です。私はこれを初めて正しくしたいと思っています。

4

4 に答える 4

8

答えは簡単です。それはできません。ソリューションをエンド ユーザーに出荷するとすぐに、エンド ユーザーは常に通信相手のサーバーを攻撃できます。この問題の最も一般的なバージョンは、Flash ゲームでのハイスコア リストのチートです。クライアントにある種の暗号化を埋め込んでコードを難読化することで、より困難にすることができます...しかし、コンパイルおよび難読化されたすべてのコードは、常に逆コンパイルして難読化を解除できます。それは、どれだけの時間とお金を費やしても構わないと思っているかの問題であり、潜在的な攻撃者にとっても同様です.

したがって、あなたの懸念は、ユーザーが誤ったデータをシステムに送信するのを防ぐ方法ではありません。ユーザーがシステムに損害を与えるのを防ぐ方法です。不完全なデータによるすべての損傷が、それを送信したユーザーにのみ影響するように、インターフェイスを設計する必要があります。

于 2009-05-01T09:04:32.317 に答える
2

HTTP ダイジェスト認証の何が問題になっていますか?

于 2008-10-27T15:29:21.603 に答える
1

これを正しく行う最も簡単な方法は、HTTPS クライアント認証を使用することだと思います。Apple のサイトには、まさにこのテーマに関するスレッドがあります。

編集:承認を処理するには、サーバー上にユーザーごとに個別のリソース (URI) を作成し、その (認証された) ユーザーのみがこのリソースを操作できるようにします。

編集 (2014): Apple は過去 6 年間でフォーラム ソフトウェアを変更しました。スレッドはhttps://discussions.apple.com/thread/1643618になりました

于 2008-10-27T15:27:34.447 に答える
1

これについてのより良い議論がここにあります:

REST API / Web サービスを保護するためのベスト プラクティス

于 2008-10-31T20:24:42.827 に答える