「dotenvy」をフォークして「dotenv-ng」を公開、bcryptシークレットを壊すバグを修正
We Are Forking dotenvy into dotenv-ng

SecretSpecチームは、Rust製の.envファイル読み書きライブラリ「dotenv-ng」1.0をリリースした。これはdotenvyのフォークで、bcryptハッシュを含む値が変数展開によって壊れるバグを修正する。dotenvyは2023年3月以来リリースがなく、メンテナンスが滞っていた。dotenv-ngはデフォルトで$をリテラルとして扱い、明示的に有効化した場合のみ変数展開を行う。また、JSONやWindowsパス、Unicodeキー名への対応、検証後の環境変数への反映、unsafe境界の明示など、多くの改善を含む。
移行ツールが、ユーザーにシークレット内のパーサー構文を認識してエスケープすることを要求するわけにはいきません。
HNでの議論
51- threecheese
私が変なのか、それとも時代遅れなのか、.envよりもdirenvを使うことに頼っているのは。最近のプロジェクトではいろんな技術を使うので、それらが全部.envファイルを解析してうまく動くことを期待するのは変な感じがします。特に推論プロバイダーのトークンが実質的に私の銀行口座をインターネットに接続しているようなものなので。
- hinkley
> しかし、.envからの移行は、それを正しく読むことから始まります。
私たちは、静的設定へのすべてのアクセスを社内ライブラリを通して仲介するシステムを持っていました。環境固有のデータに直接触れる人がいなかったので、それはRaftソースからの再読み込み可能な設定を重ねたり、古い12 Factorソリューションを通して来る環境固有のシークレットを組み込んだりするのに便利な場所でしたが、他のシークレット管理も統合できたでしょう。
あるいは、それを別のAPIとして残すこともできました。それは疲れたり気が散っている人にはうまく機能する傾向があります。セキュリティ関連のものをアクセスするのに独自のコードパターンを使うことは、人々がそれを他のデータと同じように扱うのを防ぐのに役立つと私は思います。つまり、気前よくあちこちに投げ回して、時々ログに書き込むような扱いです。ミサイル発射スイッチのガードと機関銃のトリガーの道徳的な等価物です。それらのうちの1つは、もう1つよりもはるかに寛容な障害モードを持っています。
これは「ケイパビリティ」ベースのシステムが頻繁に遭遇するのと同じ問題です。ケイパビリティは、何かを見ることができればそれを使う権利があることを意味することになります。そして、同僚がシステムに新しい機能を追加すると、偶然にも見るべきでないものを見ることができるようになります。
例えばJavaはこれに頻繁に遭遇しました。誰かがグローバル状態にオブジェクトを追加し、同僚がクライアントコードがまったく持つべきではない独自データへの参照の参照を追加したことに気づかないことがありました。…
- whalesalad
環境変数の美しさは、プログラムを実行する前に操作できることです。実行時の.envローダーを持つ必要性が理解できません。その環境変数はプログラムを実行する前に確立できるのです。すべての言語はライブラリなしで環境変数を読むことができます。この分野での変化は大きすぎます...それは悪臭です。
私はzsh設定にこれ用のシェル関数を持っています:
function lenv() {
export $(cat .env | xargs)
}
これ以上にUNIXらしいものはありません。私はチームがライブラリを使って環境ファイルを自動ロードするソフトウェアを構築することを許可していません。それは本当に混乱です。それはシェルの管轄です。
- drdexebtjl
ドル記号をエスケープすればいいだけじゃないですか?
もし本当に.envが間違いだったと思うなら(実際そうでした)、それを終わらせればいいのです。あなたたちが今それを生かし続けているのです。
- a1o
最後のngはどういう意味ですか?いくつかの製品やプロジェクトでそれを見かけましたが、その意味の説明はありませんでした。