[英]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.