0

私は初心者のWeb開発者であり、開発したAPIのセキュリティについて疑問があります。これは、データにアクセス/変更するために認証を必要とする単純なWebサービスです。

HTTPを介してユーザーを認証するためのベストプラクティスは何でしょうか。

現在、私のアプリは次のように機能します。

ユーザーは、ユーザー名とパスワードを必要とするAPIリクエスト(POST)を介して認証します。応答には、ユーザーに関する情報と、今後さらに要求するために使用されるトークンが含まれます。

私の懸念:認証要求をPOSTにする必要があるかどうかわかりません。POSTは何かを作成する必要があるため、GETのように聞こえます(少なくともこれはRuby on Railsの規則です)。そして、POSTまたはGETを使用しても、情報の転送中は情報が「表示」されます。HTTPSについて何か聞いたことがありますが、それで問題はどのように解決されますか?

トークンはユーザーの作成時に生成され、時間的に同じままです。これは悪いですか?「ログアウト」後にトークンを再度生成する必要がありますか?認証用のトークンに沿ってAPI_KEYを使用するAPIを見てきました。それはどのように機能しますか?

何かに関する情報を取得するためのGETリクエストがいくつかあります。このリクエストでは、認証リクエストから取得したトークンをパラメータとして渡します。これでいい?つまり、トークンは機密情報です。

私のこれらの懸念に関する詳細情報(本、記事、w / e)はどこにありますか?

4

2 に答える 2

1

GET の問題は、Web セキュリティよりも物理的なセキュリティの問題です。私は職場や自宅で定期的に他のユーザーと一緒にサイトにログインしていることを知っています。自分の資格情報を URL にクエリ文字列として追加したくないのは確かです。

HTTPS (SSL) を使用すると、情報が回線経由で送信される前に暗号化されるため、投稿データが保護されます。暗号化アルゴリズムは、中間者攻撃の影響を受けないようにするために、復号化トークンを生成する際にいくつかの非常に巧妙な数学を使用します。

于 2012-12-04T16:11:14.430 に答える
1

HTTPS は Web サイトへのすべてのトラフィックを暗号化するため、get および post 要求が隠されます。HTTPS 証明書を購入し (安価です)、ホストする非共有 IP を取得する必要があります (それほど安くはありません)。(誰かが自己署名証明書について話している場合、それは可能ですが、外部の人があなたのサービスと話したい場合はお勧めしません)。

ログイン トークンが長続きするのは良くない場合があります。誰かが 2 年前にログインし、トークンを引き続き使用できる場合、それがまだ元の要求者であることをどうやって知ることができますか? トークンは期限切れになり、再リクエストする方法が必要です。

API キーは通常、帯域外でスワップされる共有シークレットで機能します (通常、ホストの Web サイトから取得することによって)。カスタム認証スキームとヘッダーが使用され、リクエストごとに計算およびチェックする必要があります。これには HTTPS は必要ありません。共有シークレットは認証ヘッダーの生成に使用されますが、一緒に送信されないため、シークレットは各リクエストで移動しません。もちろん、このコードを記述し、プロセスをどのようにしたいかを理解する必要があります。自分が何をしているのかわからない限り、私は一般的にこれを避けます。リクエストの正規表現を取得し、署名してから、それをヘッダーとして使用する必要があります。複雑ではありませんが、単純でもありません。

于 2012-12-04T16:14:29.150 に答える