Question

Snoop vous permet de regarder à l'intérieur des propriétés de l'élément application et changement. Son dans certains cas, un grand atout pour les développeurs, mais peut être un problème de sécurité, comme lorsque nous avons des utilisateurs qui aiment à regarder dans des endroits où ils ne devraient pas être à la recherche. Est-il un moyen de faire quelque chose pour bloquer des applications comme Snoop de « fouiner » votre application?

Et s'il n'y a aucun moyen de bloquer, que suggérez-vous de faire pour minimiser les risques de sécurité?

Snoop est un utilitaire qui vous permet de parcourir l'arbre visuel d'une application WPF et afficher les propriétés et le changement. Il est très utile lorsque vous essayez de déboguer quelque chose et avez aucune idée de ce qui se passe. Vous pouvez trouver plus .

Merci.

Était-ce utile?

La solution

En mettant en œuvre la sécurité correctement. Si votre « sécurité » peut être contrecarrée avec un outil comme Snoop, alors vous le faites mal.

On suppose qu'il ya une commande que seuls certains utilisateurs peuvent exécuter. Il semble que le seul endroit où vous imposez ce soit au niveau de l'interface utilisateur (en désactivant le bouton correspondant, par exemple). Cela étant le cas, vous avez raison - je pourrais facilement utiliser Snoop pour activer le bouton et exécuter la commande. Mais vous devriez être faire respecter les contraintes de sécurité sur votre serveur, ou peut-être dans votre logique d'exécution de la commande si vous avez pas de serveur. Fondamentalement, la sécurité devrait être mis en œuvre au plus près de la chose que vous essayez de protéger possible. Sécurité au niveau de l'interface utilisateur est simplement pour la commodité de l'utilisateur.

Autres conseils

Il est en fait un moyen de détecter si votre application est « espionné » par le programme de Snoop. La solution que je donnerai n'est pas une balle d'argent, et si quelqu'un veut vraiment fouiner votre demande, ils auraient à modifier le code source de snoop (c'est un projet open source).

Qu'est-ce que snoop ne fait est-il injecte un assemblage dans votre application, et l'ensemble injecté examine de manière récursive vos applications d'arbre visuel à partir de la racine. En d'autres termes, Snoop fait court dans votre application. Cela étant dit, la solution est de déclencher un événement lors de l'injection assemblage snoop dans votre application.

D'abord, vous devez vous abonner à l'endroit de l'événement assemblage chargé dans votre application (de préférence le begginging):

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

Ensuite, vous implémenter le gestionnaire un peu comme ceci:

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

Vous auriez probablement besoin d'améliorer cette solution pour vraie solution miracle, mais au moins cette solution va certainement arrêter la dernière version actuelle de Snoop en cours d'exécution est comme (sans le code modifié). La meilleure solution serait de vérifier qu'aucun des assemblages externes sont injectés dans votre application.

Cependant, Kent est toujours juste dans le fait qu'un utilitaire comme Snoop ne devrait pas causer des failles de sécurité puisque la sécurité ne doit pas être mis en œuvre au niveau de l'interface utilisateur. Mais au moins cela montre comment vous empêcher les gens de « fouiner » votre application.

Grandes réponses pour une très bonne question,

Je veux ajouter un exemple du mot de passe qui ne devrait jamais être enregistré dans votre datacontext, comme chèque de Snoop aussi le DataContext de l'interface utilisateur, donc si vous utilisez le PasswordBox de commande à droite, vous constaterez que vous ne pouvez pas lier le mot de passe la propriété, cela signifie que même si vous snoop l'application que vous ne pouvez pas obtenir le mot de passe car il est pas enregistré dans une propriété

Mais nous avons trouvé beaucoup de gens qui essaient de créer un travail autour (aides, comportements, usercontrol ...) pour lier le mot de passe, mais ils oublient que Snoop peut obtenir comme ça

Ainsi, votre serveur ne doit jamais faire confiance à votre client, chaque fois qu'il doit vérifier le privilège droit (comme on peut renifler la demande client à l'aide Fiddler pour exp reconstruire ensuite une demande de custome par passe la sécurité des applications client)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top