2017-04-19 5 views
1

アクセシビリティと一般的なプログラミングの慣行について、パブリックとプライベートの違いを理解しています。私はDLLの中でこれのセキュリティについてより具体的に尋ねています。 (彼らは一定の基準を満たした後はさておき、条件手当から)DLLは、次のようになりますパブリッククラスのプライベートプロパティがDLLで保護されていますか?

...

public static class OrphanAnnieDecoderRing 
    { 
     private const string _secretCode = "Drink More Ovaltine"; 

     private int OvaltineDrinkCount = 0; 

     public void DrinkOvaltine() => OvaltineDrinkCount += 1; 

     public string RevealSecret 
     { 
      get 
      { 
       if (OvaltineDrinkCount >= 500) 
       { 
        return _secretCode; 
       } 
       else 
       { 
        return "Unable to reveal secret!"; 
       } 
      } 
     } 
    } 

は、DLLにアクセスする者による視界または操作から安全な私の_secretCodeとOvaltineDrinkCountプロパティはありますか?私は、DLLファイルがセキュリティ上の問題を引き起こす可能性があることを知っています。プライベートプロパティやプライベート定数がこれらの問題の中にあるかどうかはわかりませんでした。

+0

待って、あなたはより多くのオバルチンを飲むことです、秘密を明らかにするために、より多くのオバルチンを飲む必要があります。これはピラミッドスキームですか? – Jonesopolis

+0

いいえ、それはクリスマスストーリーです:P –

答えて

2

アクセス修飾子は、クラスの発信者へのアクセスを制限するために使用します。 これは、オブジェクト指向プログラミングOOP(インプリメンテーションの詳細など)で導入された主な目標の1つであるカプセル化を強制するのに便利です。

DLLにコードをコンパイルすると、アセンブリで中間言語(IL)に変換されます(これは技術的にはアンマネージ(Win32 Dynamic Link Libraries)とほとんど関係がありません。

ILは、ILSpyのようなツールを使用して簡単に「リバースエンジニアリング」することができます。したがって、文字通り、アセンブリにアクセスできるすべての人が「読み取り」できます。秘密。

(これ以上進んでも、個人用の読み取り専用フィールドは、リフレクションを使用してクラス外から変更することはできますが、それはそれ自体のトピックです)

+0

この優れた答えに加えて、constフィールド値はアセンブリマニフェストに格納されているため、アセンブリを完全に逆コンパイルする必要はありません。 – KeithS

+0

@earloc簡潔で完全な答えをありがとう!あなたがコードの秘密を隠すために私にお勧めする方法はありますか?そうでなければ難読化する必要のあるものですか? –

+0

は秘密の種類に依存します。あなたは私たちから隠そうとしていますか? ;)実際の質問がちょっと正確であれば、あなたを正しい方向に押し込むことができるかもしれません。 この「秘密」がアセンブリ内に保存されている限り、悪意のある不正行為(例えば、暗号化や難読化など)を悪用しようとする可能性があることを示すバーを表示してください。 いずれにしても、リスクが軽減されますが、コードの可読性も低下します。 –

関連する問題