2012-03-15 14 views
0

私は自分のウェブサイトのAPIサービスに取り組んでいます。私はこのトピックについて多くのことを読んだことがありますが、私にとって最善の解決策がどれかを判断することはできません。APIを保護する必要はありますか?

私のAPIは単純です。各ユーザーはAPIキー)、各アプリ(私のサイトに接続する)を取得します。 のみ2異なる呼び出しがありますは、ATM:

  • SEND_DATA
  • get_data

get_dataは、あなたのミニアプリに新しいエントリを終了することができますSEND_DATAで、静かな無害です。コールには制限がありますが、セキュリティ上の問題が発生する可能性があります。データが間違っている場合、そのデータは役に立ちません。サーバー側の私は

の呼び出しは、このようなものですSQLインジェクションなどのために保護されています: http://example.com/api/?call=send_data&data=DATAXYZ&api_key=KEY

プロ:

  • それは

コンを使用するように、超簡単です。

  • 安全でない

私は多くの類似の質問をここや他の場所で多く読んでおり、OAuthはそれらのほとんどすべてについて可能な答えとしてポップアップしています。私はOAuthを知っています。ユーザーにとって使いやすいものには、オーバーヘッドがたくさんあると思います。

として、いつもの許可を使用する必要がないです。この記事で説明: http://blog.apigee.com/detail/do_you_need_api_keys_api_identity_vs._authorization/

は、私の場合のために、すべての真あまりにもかかわらず、このですかあなたはまだまたはOAuthをせずに認証をお勧めしますか?

答えて

2

APIキーをGETパラメータとして送信しないでください。ブラウザの履歴(およびおそらくプロキシもあります)には非常に安全ではありません。代わりにPOSTしてください。

実際に広く使われている基本アクセス認証では、ユーザー名とパスワードがプレーンテキスト(base64エンコード)として送信されます。フォームを使用して任意のWebサービスにログインするとパスワードもプレーンテキストとして送信しています。もちろん、これはクライアントとサーバー間の通信が安全であるという前提で動作するので、おそらくHTTPSを使用したいと考えています。

+0

回答と提案をありがとう!いいえ?それはあまりにも悪いです。これにより、システムにまだ精通していないユーザーにとっては、APIがより複雑なものになります。 アイデアは、私はAPIに接続する自分のアプリケーションを持っているが、他の開発者がいるということです。アプリやスクリプトを作成することもできます。だから私はHTTPSを避ける​​方法がないと思う。 – bottleboot

+0

プレーンHTTP経由でGETリクエストを送信することは、(リンクした記事が指摘しているように)ユーザーあたりのおおよそのリクエスト数を制御したい場合は問題ありません。物事が変わるユーザーがコンテンツを投稿できるとき。とにかく、POST要求を送信するのはGET要求を送信するよりも難しくないと思うし、データを送信するときに意味的に正しいと思う。 HTTPSに関しては、あなたが盗聴を心配している場合は避けられないと思うし、セキュリティ保護されていないかWEPで保護されたWIFIを盗聴するのは専門家を必要としない;) – serans

+0

助けてくれてありがとう! – bottleboot

1

私は個人的に、複数の商用プロジェクトで同様のAPI認証方法を使用しています。
これまでのところ、セキュリティに関する問題は一度もありませんでしたが、少し異なるアプローチを使用しています。

私が違うこと:
a)API呼び出しには、user-id/loginとAPIキーを使用します。
b)APIキーは、ユーザーパスワードのsalted md5ハッシュです(ユーザーIDと他のものを塩として追加できます)。
これは、人々がAPIキーを「推測」しようとする可能性が低いことを意味します。あなたのログであなたのAPIを誰が使っているかを見てください(APIキーを調べることなく)。
ユーザーはパスワードを変更することでAPIキーを変更できるため、APIの資格情報が漏洩している可能性があると思われる場合は、変更することができます。

GET/POSTについて:ユーザーがAPIを自分で使用していない場合(たとえば、独自のツール/スクリプト/コードに含めて)、私はPOSTを推奨するseranとして使います。
しかし、POSTにはいくつかの欠点があります。使用するのが簡単ではありません。実装するにはもう少し作業が必要です。
私はPOSTだけでなくGETを提供し、起こりうるセキュリティ問題についてのメモを追加します。

+0

答えと提案をありがとう!私はまだGETを使うことができれば嬉しいです。昨日始めたばかりの人々が理解できる簡単なAPIが本当に必要です。 httpsを使用していますか? 私はAPIキーとして塩漬けされたパスワードを使用するつもりはないが、それは非常に安全ではないようだ。 APIキーは分離されています。私のアプリケーションの中で私はすべての塩。私はこのプロセスをユーザーに説明し、塩分と呼ぶ方法のコードサンプルを提供することができました。 – bottleboot

+0

私はhttpsを提供していますが、強制しないので、開発者にとってしばしば複雑になります。 ちょうどあなたが言ったように、人々はそれを使用する必要があり、GETベースのAPIはあなたが提供できる最も簡単なものの一つです。 修正されたパスワードをapi-keyとして使用することは、あなたのコードと環境が信頼でき、共有されていないと本当の危険はありません。そうでなければパスワードに関係のない別の鍵(例えばオープンソースなど)を保存する必要があります。 追加のセキュリティとしてAPIログファイルをユーザーに提供できるため、誰も自分のAPIを使用していないことを確認できます。 – John

+0

ありがとうございました! – bottleboot

関連する問題