2013-06-12 6 views
5

私は、APIを中心としたカスタム認証メソッドを使用して、リクエストメソッド、URL、params、パブリックAPIキーであり、プライベートAPIキーでエンコードされます。これはサーバー側で正常に動作しますが、クライアント側でプライベートAPIキー(および認証方法)は脆弱です。私は最後の1時間かそこらでこのAPIキーを保護するための良い方法を探していました。私が見つけた最良の方法は私のサーバーをプロキシすることですが、これについてはまだ100%は分かりません。クライアント(JavaScript、Android、iOSなど)のAPIキーを保護する

まず、私は心配する必要がありますか? Webアプリケーションでセキュリティを最優先にしたいと思っていますが、ユーザーのアカウントの変更を処理するものは、(HMACハッシュに加えて)要求を承認するために一時的に暗号化されたトークンが必要です。

プロキシからの私の理解は、サーバーに要求を行い、秘密鍵で暗号化して情報を返します。しかし、サーバーは、要求が有効なAPIを持つソースからのものであることをどのように検証するのでしょうかキー?

私は何をすべきかについて誰にでも洞察力を提供できますか? JavaScript、iOS、Androidなどのクライアント側のコードでこの脆弱性が潜在的に発生する可能性があるようです。

+1

[あなたの投稿にシグネチャやタグラインを使用しないでください](http://stackoverflow.com/faq#signatures)。 – meagar

+0

秘密鍵はどのように脆弱ですか?あなたはクライアントに鍵を渡さなければなりません。それともうまくいきません... – dandavis

+0

現在、クライアントは私の公式のアプリケーション(ウェブとモバイル)だけです。しかし、サイト上でAJAX呼び出しが可能になるには、JavaScriptソースに秘密鍵と認証方法が表示されます。 – Sam

答えて

4

クライアントを信頼することはできません。あなたが難読化しても、誰かがそれを理解することができます。たとえば、敵対者は、難読化アルゴリズムをリバースエンジニアリングしたり、デバイスメモリを調べたり、ワイヤを介して送信された内容を取得したりすることができます。

ただし、サーバー側でセキュリティを強化することで、安全なアプリを作成することはできます。たとえば、特権APIリクエストを正常に作成するには、ユーザーを認証する必要があります。

また、入力の検証、レート制限、IPアドレスの追跡など、サーバー側でAPIの使用を強制することもできます。

+0

誰かが質問をアップしたので私がこれに戻ってくるたびに、「あなたはクライアントを信じることはできません」と思う。私はこの考え方の大ファンとなっており、APIの作成を合理化することにも役立ちました(登録時にパスワード確認をする必要はありません。 – Sam

+0

@sam確認は、ユーザーが入力したと思ったものを入力したことを確認することです。間違った方法でパスワードを間違えて入力することはあまりありません。 –

関連する問題