2016-06-21 8 views
0

私は誰がどのように知っているだろうことを願って、誰もがユーザ名とAPIとパスワードを検証する方法を知っているならば、私は安全な方法であるAPIを使用してユーザー情報を検証する方法は?

http://api.example.com/profile?uname=name&pass=the-password

を使用する愚かで保護されていないだろうかなり確信していると思いましてこれを安全な方法で行うには?

ありがとうございます!

+0

Ajaxがあなたの仕事をしますか? ajaxがXSRFトークンで安全であることを確認し、サーバー側のみを検証しますか? –

+1

そのようなget文字列に資格情報を渡さないでください。 URLは、サーバー上のアクセスログに書き込まれます。ログ全体にユーザー名/パスワードがたくさんあることは望ましくありません。ヘッダーを使用し、基本認証のように確立されたものを使用する可能性があります。また、安全とは、すべてにhttpsを使用することを意味します。これにはすでに確立された基準もあります。 OAuth 1または2を見てください。 –

+0

さて、よく、ヘッダーの使い方は?どういう意味ですか? – krunos

答えて

2

安全な接続を使用して、ヘッダーの内部にユーザー名とパスワードを送信することがこれを達成する最善の方法です。

HTTPSは、人がトランジット中のパケットを単に解読できないようにします。もちろん、HTTPSでも、URLに機密データを投げることにはセキュリティ上の懸念がたくさんあります(Are https URLs encrypted?参照)。そのため、というヘッダーを使用しています。

はcURLを介して、ヘッダを送信するためにここを参照してください:

How to send a header using a HTTP request through a curl call?

はあなたが適切なヘッダを送信したら、APIは(もちろん)これらのヘッダーの値に基づいて認証する必要があります。

これを実行する最も一般的な方法は、ユーザー名とパスワードを使用して承認するエンドポイントを1つ作成し、次に認証トークンを送信することです。その後、そのトークンを受信すると、各リクエストにというトークンを単に入れます。私はトークンが両方の方法で使われているのを見ました。ヘッダーを介して、URLを介して。時間の制限されたアクセストークンを使用すると、URL自体の内部にトークンを使用することができます。しかし、私は永遠の悲観主義者であり、URLの代わりにヘッダーにトークンを運ぶようにアドバイスします。

ただし、その選択はあなたのものです(APIを制御しない限り)。

+1

は、最初の接続/ハンドシェイクのドメイン/サーバー名とは別に、パス部分を含むヘッダーなので、残りのURLはhttpsで暗号化されています。機密情報は、サーバー上のログファイルに書き込まれるため、URLには含めたくないだけです。あなたは、ハッシュされていないユーザー名/パスワードでいっぱいのファイルを置いておきたくありません。 –

+0

@JonathanKuhn確立されたら、はい、あなたは正しいです。私は単純化し過ぎたと思う。こちらをご覧ください:http://stackoverflow.com/questions/499591/are-https-urls-encrypted DNSリクエストのような他の懸念もまた脅威を引き起こします。これは、あなたがURLにそれを含めないもう一つの理由です。単純化/不正確さを反映するために投稿を編集しました。 –

+0

私はヘッダーを見ていきます:) – krunos

関連する問題