Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对wpf应用程序进行防窥探?_Wpf_Security_Snoop - Fatal编程技术网

如何对wpf应用程序进行防窥探?

如何对wpf应用程序进行防窥探?,wpf,security,snoop,Wpf,Security,Snoop,Snoop允许您查看应用程序内部并更改元素属性。 这对开发人员来说是一项巨大的资产,但在某些情况下可能是一个安全问题,比如当我们的用户喜欢在他们不应该看到的地方查看时。有没有办法阻止Snoop之类的应用程序“窥探”您的应用程序 如果没有办法阻止它,您建议如何将安全风险降至最低 Snoop是一个实用工具,允许您浏览wpf应用程序的可视树,并查看和更改属性。当您试图调试某些东西而不知道发生了什么时,它非常有用。你可以找到更多 谢谢。通过正确实施安全性。如果你的“安全性”可以用Snoop这样的工具来阻

Snoop允许您查看应用程序内部并更改元素属性。 这对开发人员来说是一项巨大的资产,但在某些情况下可能是一个安全问题,比如当我们的用户喜欢在他们不应该看到的地方查看时。有没有办法阻止Snoop之类的应用程序“窥探”您的应用程序

如果没有办法阻止它,您建议如何将安全风险降至最低

Snoop是一个实用工具,允许您浏览wpf应用程序的可视树,并查看和更改属性。当您试图调试某些东西而不知道发生了什么时,它非常有用。你可以找到更多


谢谢。

通过正确实施安全性。如果你的“安全性”可以用Snoop这样的工具来阻止,那么你就是做错了


假设有一个只有特定用户才能执行的命令。听起来,您唯一要强制执行此操作的地方是UI级别(例如,通过禁用相应的按钮)。在这种情况下,你是对的-我可以很容易地使用Snoop来启用按钮并执行命令。但是,您应该在服务器上强制执行安全约束,如果没有服务器,则可能在命令执行逻辑中强制执行安全约束。基本上,安全性的实现应该尽可能靠近您试图保护的对象。UI级别的安全性只是为了方便用户。

实际上有一种方法可以检测应用程序是否被snoop程序“窥探”。我给出的解决方案不是万能的,如果有人真的想窥探你的应用程序,他们必须修改窥探源代码(这是一个开源项目)

snoop实际做的是将程序集注入到应用程序中,注入的程序集从根开始递归地检查应用程序的可视树。换句话说,snoop实际上在应用程序内部运行。也就是说,解决方案是在将snoop程序集注入应用程序时引发事件

首先,您需要订阅应用程序中某个加载程序集的事件(最好是Begging):

然后,您将实现如下处理程序:

        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按原样运行(无需修改代码)。更好的解决方案是检查没有外部程序集被注入到应用程序中


然而,Kent仍然正确地认识到,像Snoop这样的实用程序不应该导致任何安全漏洞,因为不应该在UI级别实现安全性。但至少这向您展示了如何防止人们“窥探”您的应用程序。

对于一个非常好的问题,回答得非常好

我想添加一个不应保存在datacontext中的密码示例,作为snoop检查UI的datacontext,因此如果使用正确的控制密码框,您将发现无法绑定password属性,这意味着,即使您窥探应用程序,也无法获取密码,因为它未保存在任何属性中

但我们发现许多人试图创建一个工作环境(助手、行为、用户控制…)来绑定密码,但他们忘记了snoop可以像那样获得密码


因此,您的服务器永远不应该信任您的客户机,每次它都应该检查正确的权限(因为我们可以使用Fiddler for exp嗅探客户机请求,然后重新生成客户机请求以绕过客户机应用程序安全)

问得好,我也在想,您能否提供有关此“Snoop”程序的更多信息,或者在上面贴一个信息链接?肯特,谢谢你的回复。我同意你的观点,安全不应该在UI级别实现。在我的项目中,我们使用命令,CanExecute中的逻辑将禁用某些用户的按钮(使用snoop无法重新启用这些按钮),以及阻止用户执行某些操作的服务器保护。然而,我们还有其他不使用命令和按钮的应用程序,它们只是被隐藏起来,所以很容易被“窥探”。这很好。再加上肯特的答案,正是我想要的。
        void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
    {
        if (args.LoadedAssembly.FullName.StartsWith("ManagedInjector"))
            MessageBox.Show("hey you, stop snooping");//and shut down your application.
    }