ユーザーパスワードの保存方法に関するstackoverflowに関する投稿を多数見つけました。ただし、アプリケーションがWeb経由で別のアプリケーションと通信するために必要なパスワードを保存するための最良の方法を知る必要がありますか?現在、当社のWebアプリはデータをリモートWebサイトに送信する必要があります。データをアップロードするために、当社のWebアプリはテキストファイルからパスワードを読み取り、ペイロードを含むヘッダーを作成し、https経由で送信します。
ファイルシステム上のプレーンテキストのこのパスワードが問題です。パスワードをより安全に保存する方法はありますか?
これはLinuxOSであり、アプリケーションはpythonで記述されており、コンパイルされていません。
ありがとう!
さらに明確にする:このプロセスに関与するユーザーはまったくいません。ファイルシステムに保存されているパスワードは、リクエストを行っているWebアプリを認証するために他のWebアプリによって使用されます。以下のコメント投稿者の言葉で言えば、「この場合、アプリケーションは別のリモートアプリケーションのクライアントです。」 (私が明確にするのを手伝ってくれたジョーに感謝します。)
質問から、別のサイトとの自動トランザクションで読み取って使用できるように、パスワードを保存する必要があるようです。パスワードを暗号化してファイルに暗号化して保存し、システムの他の場所に保存されているキーを使用して復号化してから使用することができます。これにより、パスワードを使用してファイルにアクセスする人は、使用されているキーと暗号化アルゴリズムを見つけて復号化できるため、問題が発生します。
防御として、破られたときに失敗する1つの強力な防御よりも、防御が少ないほど優れています。さらに、パスワード自体ではなく、パスワードを含むファイルも保護します。パスワードを含むファイルを提供する可能性を無効にするようにWebサーバーを構成し、ファイルを別のアカウントで実行する必要があるプロセスを設定して、プロセスを実行するアカウントと管理者アカウントのみにファイルへのアクセスを制限できるようにします。
私はあなたがこれを行うための絶対確実な方法を見つけるとは思わない。 「隠すことによるセキュリティ」を実現するための組み合わせを提案します。
RSAのような双方向のキー暗号化アルゴリズムを使用できます。パスワードは暗号化されて(ユーザーの脳に保存されているキーによって)ファイルシステムに保存されますが、パスワードをデコードするには、ユーザーがキーを入力する必要があります。
少なくとも、アクセス許可を使用して(それらをサポートするファイルシステムを使用している場合)、ファイルを読み取ることができるのは自分だけであることを確認する必要があります。
さらに、アプリがコンパイルされている場合、ハードコードされたパスフレーズを使用してパスワードを暗号化することはそれほど難しくありません。コードがコンパイルされていない場合、攻撃者になる可能性のある人がソースを読み取って暗号化を決定する可能性があるため、このメソッドは実際には役に立ちません。