質問
Snoopを使用すると、アプリケーションの内部を調べて要素のプロパティを変更できます。開発者にとっては素晴らしい資産ですが、検討すべきではない場所を見るのが好きなユーザーがいる場合など、場合によってはセキュリティの問題になる可能性があります。 Snoopのようなアプリケーションのようなアプリケーションの「Snooping」のようなアプリケーションをブロックするために何かをする方法はありますか?
そして、それをブロックする方法がない場合、セキュリティリスクを最小限に抑えるために何をすることをお勧めしますか?
Snoopは、WPFアプリケーションの視覚ツリーを閲覧し、プロパティを表示および変更できるユーティリティです。何かをデバッグしようとしているときに非常に便利で、何が起こっているのかわからない。もっと見つけることができます ここ.
ありがとうございました。
解決
セキュリティを適切に実装することにより。 「セキュリティ」をSnoopのようなツールで妨害できる場合、あなたはそれを間違っています。
特定のユーザーのみが実行できるコマンドがあるとします。これを実施している唯一の場所は、UIレベルにあるように聞こえます(たとえば、対応するボタンを無効にすることにより)。その場合、あなたは正しいです - 私はSnoopを簡単に使用してボタンを有効にしてコマンドを実行することができました。ただし、サーバーにセキュリティの制約を実施するか、サーバーがない場合はコマンド実行ロジックで実行する必要があります。基本的に、セキュリティは、可能な限り保護しようとしているものに近いものとして実装する必要があります。 UIレベルでのセキュリティは、単にユーザーの利便性のためです。
他のヒント
実際、アプリケーションがSnoopプログラムによって「スヌープ」されているかどうかを検出する方法があります。私が与える解決策は銀の弾丸ではなく、誰かが本当にあなたのアプリケーションをスヌープしたいなら、彼らはSnoopソースコードを変更する必要があります(これはオープンソースプロジェクトです)。
スヌープが実際に行うことは、それがアプリケーションにアセンブリを注入することであり、注入されたアセンブリはルートから始まるアプリケーションの視覚ツリーを再帰的に調べます。言い換えれば、スヌープは実際に実行されます 中身 あなたの申請。そうは言っても、解決策は、スヌープアセンブリがアプリケーションに注入されたときにイベントを提起することです。
まず、アプリケーションのどこかに組み立てられたイベントを購読する必要があります(できればgginging):
AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad);
次に、このようにハンドラーを実装します。
void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
{
if (args.LoadedAssembly.FullName.StartsWith("ManagedInjector"))
MessageBox.Show("hey you, stop snooping");//and shut down your application.
}
おそらく、実際のシルバーブレットソリューションのためにこのソリューションを強化する必要がありますが、少なくともこのソリューションは、現在の最新バージョンのSnoopがそのまま実行されることを間違いなく停止します(コードを変更せずに)。より良い解決策は、外部アセンブリがアプリケーションに注入されていないことを確認することです。
ただし、ケントは、SnoopのようなユーティリティがUIレベルでセキュリティを実装すべきではないため、セキュリティの脆弱性を引き起こすべきではないという事実に依然として正しいです。しかし、少なくともこれは、人々があなたのアプリケーションを「スヌーピング」するのを防ぐ方法をあなたに示しています。
非常に良い質問に対する素晴らしい回答、
SnoopがUIのデータコンテキストもチェックするため、DataContextに決して保存されないパスワードの例を追加したいので、適切なコントロールパスワードボックスを使用すると、パスワードプロパティをバインドできないことがわかります。アプリケーションをスヌープしても、プロパティに保存されていないため、パスワードを取得できないことを意味します
しかし、パスワードをバインドするために(ヘルパー、行動、usercontrol ...)回避を作成しようとする多くの人々を見つけましたが、スヌープはそれを手に入れることができることを忘れています
そのため、サーバーはクライアントを信頼しないでください。適切な特権を確認するたびに(EXPのFiddlerを使用してクライアントリクエストを嗅ぐことができるため、クライアントアプリケーションのセキュリティに合格することで顧客リクエストを再構築できます)