web-dev-qa-db-ja.com

クロージャのコンパイラ機能は、メンバー変数のセキュリティを低下させますか?

this の議論に基づいて、C#のクロージャは、コンパイル時にプライベート変数をパブリック変数にプロモートします。

ユーザー名またはパスワードの文字列にクロージャーが実装されたとします。実行時にこれにセキュリティ上の問題はありますか?これは他の言語の問題ですか?

もしそうなら、私がこれを(属性を介して)防ぐことができる方法はありますか?

4

可視性の向上にもかかわらず、クロージャには新しいセキュリティの問題はありません。

これは単純な理由によるもので、可視性(つまり、プライベート/パブリック)はそもそもセキュリティメカニズムではありません。
パスワードフィールドをprivateとしてマークしたからといって、アクセスできないという意味ではありません。 notアクセス可能ですが、正常に動作するコードにのみアクセスできます。
コードで簡単にアクセスできます。反射を介して。 (もちろん、あなたのクラスの消費者はそうすべきではありません...)

そして、それはデバッグ、メモリ検査などのようなことをしなくてもです...

つまり、私が言ったように、セキュリティのレベルには影響しません。そのパスワードフィールドを保護する必要がありますが、とにかくそれを行う必要があります。
(提案:パスワードを文字列ではなくSecureStringとして保存してください...)

5
AviD