如何Snoop证明你的wpf应用程序?

时间:2010-10-20 20:21:45

标签: wpf security snoop

Snoop允许您查看应用程序内部并更改元素属性。 它对开发人员来说是一笔巨大的财富,但在某些情况下可能会出现安全问题,例如我们的用户喜欢寻找他们不应该寻找的地方。有没有办法阻止Snoop等应用程序“窥探”您的应用程序?

如果无法阻止它,你建议做什么来降低安全风险?

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

谢谢。

3 个答案:

答案 0 :(得分:44)

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

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(未修改代码)。更好的解决方案是检查没有外部组件注入您的应用程序。

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

答案 1 :(得分:33)

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

假设有一个只有某些用户才能执行的命令。听起来这是您执行此操作的唯一地方是在UI级别(例如,通过禁用相应的按钮)。既然如此,你是对的 - 我可以轻松使用Snoop来启用按钮并执行命令。但是,如果没有服务器,则应该在服务器上强制执行安全约束,或者在命令执行逻辑中执行安全约束。基本上,安全性应该尽可能接近你想要保护的东西。 UI级别的安全性仅仅是为了方便用户。

答案 2 :(得分:0)

对一个非常好的问题做出了很好的回应,

我想添加一个永远不会保存在datacontext中的密码示例,因为snoop还会检查UI的datacontext,因此如果使用正确的控件PasswordBox,您会发现无法绑定密码属性,这意味着即使你窥探应用程序,你也无法获得密码,因为它没有保存在任何属性中

但是我们发现很多人试图创建一个解决方案(帮助者,行为,用户控制......)来绑定密码,但他们忘记了窥探可以像那样得到它

因此,每次应该检查正确的权限时,您的服务器永远不应该信任您的客户端(因为我们可以使用Fiddler为exp嗅探客户端请求,然后通过传递客户端应用程序安全性来重建客户请求)