繁体   English   中英

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

[英]How to Snoop proof your wpf application?

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

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

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

谢谢。

实际上有一种方法可以检测您的应用程序是否被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级别实现。 但至少这会向您展示如何防止人们“窥探”您的应用程序。

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

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

对一个非常好的问题的好评,

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM