this の議論に基づいて、C#のクロージャは、コンパイル時にプライベート変数をパブリック変数にプロモートします。
ユーザー名またはパスワードの文字列にクロージャーが実装されたとします。実行時にこれにセキュリティ上の問題はありますか?これは他の言語の問題ですか?
もしそうなら、私がこれを(属性を介して)防ぐことができる方法はありますか?
可視性の向上にもかかわらず、クロージャには新しいセキュリティの問題はありません。
これは単純な理由によるもので、可視性(つまり、プライベート/パブリック)はそもそもセキュリティメカニズムではありません。
パスワードフィールドをprivate
としてマークしたからといって、アクセスできないという意味ではありません。 notアクセス可能ですが、正常に動作するコードにのみアクセスできます。
コードで簡単にアクセスできます。反射を介して。 (もちろん、あなたのクラスの消費者はそうすべきではありません...)
そして、それはデバッグ、メモリ検査などのようなことをしなくてもです...
つまり、私が言ったように、セキュリティのレベルには影響しません。そのパスワードフィールドを保護する必要がありますが、とにかくそれを行う必要があります。
(提案:パスワードを文字列ではなくSecureString
として保存してください...)