クライアントとサーバー間の安全な接続
-
19-09-2019 - |
質問
私は埋め込みクライアントのリクエストに対応するサーバー コンポーネントを開発していますが、これも私の制御下にあります。
現時点ではすべてがベータ版であり、セキュリティは次のように機能します。
クライアントは https 経由でユーザー名とパスワードを送信します。
サーバーはアクセストークンを返します。
クライアントは、カスタム ヘッダー内のアクセス トークンを使用して http 経由でさらにリクエストを送信します。
これはデモとしては問題ありませんが、リリースする前に修正する必要がある問題がいくつかあります。
誰でもコピーできます一部のユーザーが回答したように、https を経由するのでこれは問題ではありません。私の間違いです。login
リクエストして再送信し、アクセス トークンを返します。リクエスト ヘッダーを検査するだけで、誰でもリッスンしてアクセス キーを取得できます。
重複したリクエストを拒否できるようにタイムスタンプを使用した対称キー暗号化を考えることはできますが、このシナリオ用のよく知られたグッド プラクティス (これは非常に一般的なようです) があるかどうか疑問に思っていました。
洞察力をありがとう。
追伸:念のため、サーバーには Java を使用し、クライアントは C++ でコーディングしています。
解決
<ストライキ>私は最初の部分を得ることはありません、HTTPS、誰もがそれをどのようにコピーすることができますか?ストライキ>
<ストライキ> 第二部についてストライキ>他のヒント
最初の質問は、それを明らかにするためです。悪意のあるクライアントなりすましアクセスを十分に懸念しているのであれば、会話全体を HTTPS 経由で実行してみてはいかがでしょうか。このアプリケーションにとって、最小限のパフォーマンスへの影響は、セキュリティ層を追加する価値がないほど重大なものですか?
次に、ログイン要求をどのようにして再実行できるでしょうか?私の記憶が間違っていなければ、それは HTTPS 経由で行われています。接続が正しく設定されている場合、HTTPS はワンタイム nonce を使用したリプレイ攻撃を防ぎます (「 ここ).
一般的な提言の一つです - httpsを使用
httpsの脇に中間者攻撃は、セッション全体にHTTPSを使用することは十分に信頼できるものでなければなりません。あなたも、アクセストークンを心配する必要はありません - 。httpsのはあなたのためにこれの世話をする。
さらに要求に対してHTTPを使用して、いくつかの脆弱性を紹介しているようです。今、ネットワークスニファを持つ誰もがあなたのトラフィックがトークンを盗み、あなたのリクエストを偽造傍受することができます。 、トークンの暗号化をトークンなど一度使用しますが、そうすることであなたは、HTTPSを再作成されます - あなたはそれを防ぐための保護を構築することができます。
それはあなたのサーバーとクライアントの間で自分自身を挿入し、そのコードをあなたの要求を集中させる誰かの能力に基づいている -バック中間者攻撃でHTTPS男に行きます。攻撃者が物理的なネットワークへのアクセスを持っている場合、すなわち、すべてのなんとかです。こうした攻撃者が直面する問題は、彼があなたに適切なデジタルcertificatを与えることができないということである - 彼はあなたがそれに署名するために使用する秘密鍵を持っていません。 HTTPSがブラウザを介してアクセスすると、ブラウザはあなたに警告を与えるが、まだあなたは、ページに通過させることができます。
あなたのケースでは、サーバーと通信するクライアントです。そして、あなたは証明書のすべての適切な検証が整っていることを確認することができます。そうした場合、あなたは大丈夫でなければならないこと
編集
Seconding Yishai - はい、いくつかのオーバーヘッドは、主にCPU、関与しないが、この追加のオーバーヘッドは、ボード上のサーバーを押すと、アプリで大きな問題を抱えているさ。