33

Snoopを使用すると、アプリケーションの内部を調べて、要素のプロパティを変更できます。これは開発者にとっては素晴らしい資産ですが、見たくない場所を探したいユーザーがいる場合など、場合によってはセキュリティの問題になる可能性があります。Snoopのようなアプリケーションがアプリケーションを「スヌーピング」するのをブロックする方法はありますか?

そして、それをブロックする方法がない場合、セキュリティリスクを最小限に抑えるために何をすることをお勧めしますか?

Snoopは、wpfアプリケーションのビジュアルツリーを参照し、プロパティを表示および変更できるようにするユーティリティです。何かをデバッグしようとしていて、何が起こっているのかわからない場合に非常に便利です。あなたはここでもっと見つけることができます。

ありがとうございました。

4

3 に答える 3

46

実際には、アプリケーションがスヌーププログラムによって「スヌープ」されているかどうかを検出する方法があります。私が提供する解決策は特効薬ではありません。誰かが本当にアプリケーションをスヌープしたい場合は、スヌープソースコードを変更する必要があります(これはオープンソースプロジェクトです)。

snoopが実際に行うことは、アセンブリをアプリケーションに挿入し、挿入されたアセンブリは、ルートから始まるアプリケーションのビジュアルツリーを再帰的に検査することです。つまり、snoopは実際にはアプリケーションで実行されます。そうは言っても、解決策は、スヌープアセンブリがアプリケーションに挿入されたときにイベントを発生させることです。

まず、アプリケーションのどこかでアセンブリがロードされたイベントをサブスクライブする必要があります(できれば物乞い)。

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が(コードを変更せずに)そのまま実行されるのを確実に停止します。より良い解決策は、外部アセンブリがアプリケーションに注入されていないことを確認することです。

ただし、セキュリティはUIレベルで実装されるべきではないため、Snoopのようなユーティリティがセキュリティの脆弱性を引き起こしてはならないという事実は依然として正しいです。しかし、少なくともこれは、人々がアプリケーションを「スヌーピング」するのを防ぐ方法を示しています。

于 2010-11-13T07:23:41.750 に答える
36

セキュリティを適切に実装する。あなたの「セキュリティ」がSnoopのようなツールで妨害される可能性があるなら、あなたはそれを間違っています。

特定のユーザーだけが実行できるコマンドがあるとします。これを強制しているのはUIレベルだけのようです(たとえば、対応するボタンを無効にすることによって)。そうだとすれば、その通りです。Snoopを使用してボタンを有効にし、コマンドを実行するのは簡単です。ただし、サーバー、またはサーバーがない場合はコマンド実行ロジックにセキュリティ制約を適用する必要があります。基本的に、セキュリティは、保護しようとしているものにできるだけ近い形で実装する必要があります。UIレベルでのセキュリティは、単にユーザーの便宜のためのものです。

于 2010-10-20T21:19:16.047 に答える
0

非常に良い質問に対する素晴らしい回答、

UIのデータコンテキストもスヌープチェックするため、データコンテキストに保存してはならないパスワードの例を追加したいので、適切なコントロールPasswordBoxを使用すると、パスワードプロパティをバインドできないことがわかります。つまり、アプリケーションをスヌープしても、どのプロパティにも保存されていないため、パスワードを取得できません。

しかし、パスワードをバインドするための回避策(ヘルパー、動作、ユーザーコントロールなど)を作成しようとする多くの人々が見つかりましたが、彼らはスヌープがそのようにパスワードを取得できることを忘れています

したがって、サーバーは、適切な特権をチェックするたびに、クライアントを信頼してはなりません(Fiddler for expを使用してクライアント要求をスニッフィングし、クライアントアプリケーションのセキュリティをバイパスしてカスタム要求を再構築できるため)

于 2015-11-04T16:03:46.557 に答える