2012-04-26 2 views
1

私は静的なWebアプリケーション、つまりHTML/CSS/JS +アセットだけで作業しています。私はそれを提供するためにラックサーバー(実際には薄い)を使用しています。APIコールをプライベート/プロテクトしたままにする

ほとんど静的なアプリですが、途中で途切れることのないサーバー側のニーズがいくつかあります。アプリケーションはJavaScriptを介してそれらのニーズと対話する必要があるので、シンプルなAPIとして機能するようにいくつかのルートを簡単にセットアップできるように、Sinatraをスタックに追加しました。

このようなAPI呼び出しの1つは電子メールを送信することです.Webアプリケーションにはユーザーに電子メールを送信する方法が必要です。私は、JSONオブジェクトを含むPOSTで呼び出せるルート(/ api/mail)を設定し、Rubyは(SendGrid経由で)電子メールを発信します。

ここに問題があります。これらのAPI呼び出しは一般に公開されています。ほとんどの場合、大丈夫ですが、電子メールAPIを使用して、私のアプリとしてポーズをとっている単純なPOSTで誰も悪質なメールを送信しないようにしたいのです。

問題は、私はこれを認証する方法がよく分かりません。誰もがPOSTヘッダを盗聴し、アプリがAPIに投稿しているクレデンシャルを取得するだけなので、ウェブアプリケーション自体はユーザではなくクライアントであるため、パスワードやAPIキーは無意味に見えます。

SSLを使用してすべてを暗号化しているのは私の唯一の選択肢ですか、それともわかりやすい解決策がありませんか?

+1

ここでSSLはどのように役立ちますか?あなたは誰から保護しようとしていますか? – ykaganovich

+0

私は簡単なパブリックPOST呼び出しを行うことができるので、私の電子メールAPIをハイジャックする匿名ユーザーから保護しようとしています。誰かが2つの理由で必要な電子メールを送信できないようにすることは望んでいません。高価で、セキュリティリスク(悪意のあるユーザーが自分のアプリとしてポーズを取る)になります。 POSTで私のサイトであることを確認するためにAPIキー(またはパスワードなど)を渡すことができると考えましたが、POSTヘッダーからキーを奪うのを防ぐためにSSL暗号化が必要です。 – redhotvengeance

+0

SSLはクライアントに対してサーバーを認証し、データをトランスポートで暗号化したままにします。しかし、それはクライアントを認証しません。誰でも、(a)ブラウザを開き、フォームページに埋め込まれたAPIキーを参照するか、(b)フォームページをダウンロードしてプログラムで取得するスクリプトを書くことができます。 APIへのアクセスをパスワードで保護することができます(基本的にはこれ以上公開されません)。私は基本的な質問は、あなたは誰がこのAPIを呼び出すことを信頼したいと思いますか。 – ykaganovich

答えて

2

1日の終わりに、あなたがしていることは何でも簡単に掻き取ることができます。私はいくつかの攻撃的なレートをipとセッションで制限していますが、他に何かが可能か(効果的か)考えないでください

+0

SSLを使用していても、POST呼び出しを盗むことができますか? – redhotvengeance

+0

@idollar SSLを使用すると、ネットワーク内のトラフィックは暗号化されますが、ブラウザボットを作成した人がいる場合は、マットのようにサーバー側でチェックする必要があります。 – Adeel

+0

@Adeelそれで、私のアプリケーションが呼び出しを行っていることを確認するために実装することができるサーバー側のチェックで、ランダムなユーザーはPOSTを行っていませんか?レートリミットはソリューションのようには感じられません。なぜなら、私のアプリとして悪意を持ってポストする電子メールAPIを1回か1000回か使用したくないからです。 – redhotvengeance

関連する問題