2010-10-20 3 views
31

Snoop ermöglicht es Ihnen, in die Anwendung zu schauen und Elementeigenschaften zu ändern. Es ist ein großer Vorteil für Entwickler, aber kann in einigen Fällen ein Sicherheitsproblem sein, wie wenn wir Benutzer haben, die an Orten suchen, wo sie nicht suchen sollten. Gibt es eine Möglichkeit, etwas zu tun, um Anwendungen wie Snoop vom "Snooping" Ihrer Anwendung abzuhalten?Wie Snoop Ihre wpf-Anwendung zu beweisen?

Und wenn es keine Möglichkeit gibt, es zu blockieren, was empfehlen Sie, um Sicherheitsrisiken zu minimieren?

Snoop ist ein Dienstprogramm, mit dem Sie den visuellen Baum einer WPF-Anwendung durchsuchen und Eigenschaften anzeigen und ändern können. Es ist sehr nützlich, wenn Sie versuchen, etwas zu debuggen und keine Ahnung haben, was vor sich geht. Sie können mehr here finden.

Vielen Dank.

+0

Gute Frage, wurde frage mich das gleiche selbst –

+1

Können Sie mehr Informationen zu diesem "Snoop" -Programm geben, oder einen Link zu Informationen darüber veröffentlichen? –

Antwort

30

Durch die ordnungsgemäße Implementierung der Sicherheit. Wenn Ihre "Sicherheit" mit einem Tool wie Snoop vereitelt werden kann, dann machen Sie es falsch.

Angenommen, es gibt einen Befehl, den nur bestimmte Benutzer ausführen können. Es scheint, als ob der einzige Ort, den Sie durchsetzen, dies auf der Ebene der Benutzeroberfläche ist (indem Sie beispielsweise die entsprechende Schaltfläche deaktivieren). In diesem Fall hast du recht - ich könnte Snoop einfach benutzen, um die Schaltfläche zu aktivieren und den Befehl auszuführen. Aber Sie sollten die Sicherheitseinschränkungen auf Ihrem Server oder vielleicht in Ihrer Befehlsausführungslogik erzwingen, wenn Sie keinen Server haben. Grundsätzlich sollte Sicherheit so nah wie möglich an der Sache implementiert werden, die Sie schützen möchten. Sicherheit auf der UI-Ebene dient lediglich der Bequemlichkeit des Benutzers.

+0

Kent, danke für Ihre Antwort. Ich stimme Ihnen zu, Sicherheit sollte nicht auf UI-Ebene implementiert werden. In meinem Projekt verwenden wir Befehle und wir haben Logik in CanExecute, die Schaltflächen für bestimmte Benutzer deaktiviert (und sie können nicht erneut mit Snoop aktiviert werden), sowie Server-Sicherheitsmaßnahmen, die verhindern, dass Benutzer bestimmte Dinge tun können. Allerdings haben wir andere Anwendungen, die keine Befehle verwenden, und Schaltflächen werden nur versteckt, so dass sie leicht "snooped" werden können. – chiefanov

39

Es gibt tatsächlich eine Möglichkeit festzustellen, ob Ihre Anwendung vom Snoop-Programm "geschnüffelt" wird. Die Lösung, die ich geben werde, ist keine Wunderwaffe, und wenn jemand wirklich Ihre Anwendung ausspionieren möchte, müsste er den Snoop-Quellcode ändern (es ist ein Open-Source-Projekt).

Was Snoop tatsächlich tut, ist injiziert eine Assembly in Ihre Anwendung, und die injizierte Assembly untersucht rekursiv den visuellen Baum Ihrer Anwendungen ab dem Stamm. Mit anderen Worten, Snoop läuft innerhalb Ihrer Anwendung. Die Lösung besteht darin, ein Ereignis auszulösen, wenn die Snoop-Baugruppe in Ihre Anwendung injiziert wird.

Zuerst müssen Sie auf die Montage-geladen Ereignis irgendwo in Ihrer Anwendung (vorzugsweise die begginging) zeichnen:

AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad); 

Dann der Handler etwas wie dies umzusetzen wäre:

 void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args) 
    { 
     if (args.LoadedAssembly.FullName.StartsWith("ManagedInjector")) 
      MessageBox.Show("hey you, stop snooping");//and shut down your application. 
    } 

Sie müssten diese Lösung wahrscheinlich für eine echte Silver-Bullet-Lösung erweitern, aber zumindest wird diese Lösung definitiv dazu führen, dass die aktuellste Version von snoop unverändert ausgeführt wird (ohne den Code geändert zu haben). Die bessere Lösung wäre, zu überprüfen, dass keine externen Baugruppen in Ihre Anwendung injiziert werden.

Allerdings ist Kent immer noch richtig in der Tatsache, dass ein Dienstprogramm wie Snoop keine Sicherheitslücken verursachen sollte, da die Sicherheit nicht auf UI-Ebene implementiert werden sollte. Aber das zeigt Ihnen zumindest, wie Sie verhindern können, dass Ihre Anwendung "geschnüffelt" wird.

+3

Das ist großartig. Und in Kombination mit Kents Antwort genau das, wonach ich gesucht habe. – chiefanov

+2

Beide sind gute Antworten, vielen Dank –

+0

Ja, diese Antwort vervollständigt die Lösung. – ahmedsafan86

0

Große Antworten für eine sehr gute Frage,

ich ein Beispiel für das Passwort hinzufügen möchten, die nie in Ihrem Datacontext, als Snoop-Check auch die Datacontext der Benutzeroberfläche gespeichert werden sollen, so dass, wenn Sie die richtige Verwendung Kontrolle PasswordBox Sie werden feststellen, dass Sie die Passwort-Eigenschaft nicht binden können, das bedeutet, auch wenn Sie die Anwendung schnüffeln, können Sie das Passwort nicht erhalten, da es in keiner Eigenschaft gespeichert ist

Aber wir fanden viele Leute, die versuchen Erstellen Sie eine Arbeit um (Helfer, Verhalten, Benutzerkontrolle ...), um das Passwort zu binden, aber sie vergessen, dass Snoop es so bekommen kann

So sollte Ihr Server nie Ihren Client vertrauen, jedes Mal, wenn er die richtige Berechtigung prüfen sollte (wie wir die Client-Anfrage mit Fiddler für exp schnüffeln dann eine custome Anfrage um Client-Anwendung Sicherheit umwandeln)

Verwandte Themen