私が遭遇した問題は、特定の情報を安全に保管する方法を見つけようとすることです。私はまだ C とともに .NET を入門言語として学習し、実験しています。したがって、基本的なロジックが不足している場合は、ご容赦ください。
要件
現在、アプリケーション設定内の「設定」ストアを使用して、次のようないくつかの情報を保存しています。
- SQL 接続文字列 (資格情報を含む)
- SMTP サーバーの設定 (資格情報を使用)
- 誰かに見つけてほしくない情報を含む他のさまざまな機密文字列(少なくともかなりの努力なしでは) .
私が「設定」ストアを使用しているのは、率直に言って、中央の 1 つの場所で値を変更し、コード内に反映できる方が簡単だからです。
もちろん、共有クラスを簡単に作成し、それをこれらすべての設定の参照として使用できることは理解しています。
誰かが .NET リフレクターを使用して、このすべての情報を取得できないようにする必要があります。- SmartAssemply を試した後、難読化中に「設定」コンテナが無視されることがすぐに明らかになりました。
今後の方法?
それで私はいくつかの調査を行いましたが、現時点では、主に可能な方法であると考えているものに直面しています. (これは私の限られた経験から来ていることを思い出してください):
- 新しい共有クラスを作成し、SmartAssembly が難読化メソッドを使用して文字列を非表示にします。
- メイン アプリケーションの横 (外部) に配置する INI/XML ファイルを作成します。これは暗号化され、アプリケーションが含まれている設定または文字列を参照する必要があるときに復号化されます。(これについて考えれば考えるほど、欠陥があるように思えますが) .
- 新しい共有クラスを作成し、 SecureStringクラスを試しますか? (PoCをいただければ幸いです)
- あなたのアイデアは?
例
たとえば、次の文字列を非表示にしようとしていたとしましょう。
Dim ConnStr As String = "server=100.100.100.1;user=admin;database=database2;port=3306;password=password123"
回答を提供するユーザーが、上記のような文字列を保護する方法と、プログラム内でそれを参照する方法を示す小さな PoC を提案とともに提供していただければ、非常に感謝しています (たとえば、暗号化に傾倒している場合)。 )。