156

私は Rails、django (および少しの php) でいくつかのアプリに取り組んでおり、そのうちのいくつかでやり始めたことの 1 つは、データベースやその他のパスワードを特定の構成ファイルにプレーンテキストではなく環境変数として保存することです (または、django アプリの場合は settings.py 内)。

これについて私の共同研究者の 1 人と話し合ったところ、彼は、これはお粗末なやり方であると示唆しました。

それで、知りたいのですが、これは安全な方法ですか?これらのファイルにパスワードをプレーンテキストとして保存する方が安全ですか (もちろん、これらのファイルを公開リポジトリなどに残さないようにしてください)。

4

8 に答える 8

78

前述のように、システムが危険にさらされると、どちらの方法も追加の「セキュリティ」層を提供しません。環境変数を優先する最も強力な理由の 1 つはバージョン管理だと思います。GIT のようなバージョン管理システムにデータベース構成などが誤って保存されて、他のすべての開発者が見ることができなくなっているのを見てきました (そして、おっと!それはたまたま私だけでなく ...)。

パスワードをファイルに保存しないと、パスワードをバージョン管理システムに保存できなくなります。

于 2012-09-17T16:15:53.190 に答える
73

より理論的なレベルでは、セキュリティのレベルを次のように考える傾向があります (強度の高い順に) :

  • セキュリティなし。プレーンテキスト。どこを見ればよいかを知っている人なら誰でも、データにアクセスできます。
  • 難読化によるセキュリティ。データ (プレーンテキスト) は、環境変数のような扱いにくい場所に保存するか、構成ファイルのように見えるファイルに保存します。攻撃者は、最終的に何が起こっているのかを理解するか、またはそれに出くわします。
  • 破るのが簡単な暗号化によって提供されるセキュリティ (シーザー暗号を考えてみてください!)。
  • 多少の努力で破ることができる暗号化によって提供されるセキュリティ。
  • 暗号化によって提供されるセキュリティは、現在のハードウェアを破ることは実際的ではありません。
  • 最も安全なシステムは、誰も使用できないシステムです! :)

環境変数は、揮発性/使い捨てであり、保存されないため、プレーンテキスト ファイルよりも安全です。つまり、「set pwd=whatever」のようにローカル環境変数のみを設定してスクリプトを実行し、スクリプトの最後にコマンド シェルを終了させると、その変数は存在しなくなります。あなたのケースは最初の 2 つに分類されますが、これはかなり安全ではないと思います。これを行う場合は、すぐ近くのイントラネット/ホーム ネットワークの外に展開することはお勧めしません。テスト目的でのみ展開することをお勧めします。

于 2012-09-17T14:56:26.817 に答える
58

パスワードを保存する必要があるときはいつでも、安全ではありません。限目。暗号化されていないパスワードを安全に保管する方法はありません。環境変数と構成ファイルのどちらがより「安全」であるかは、おそらく議論の余地があります。私見ですが、システムが侵害された場合、それがどこに保存されているかは問題ではありません。勤勉なハッカーはそれを追跡できます。

于 2012-09-17T14:42:04.413 に答える