Snoop允许您查看应用程序内部并更改元素属性。这对开发人员来说是一个很好的资产,但在某些情况下也可能是一个安全问题,比如当我们的用户喜欢查看他们不应该查看的地方时。有没有办法阻止像Snoop这样的应用程序“窥探”你的应用程序?
如果没有办法阻止它,您建议如何将安全风险降至最低?
Snoop是一个实用程序,它允许您浏览wpf应用程序可视化树以及查看和更改属性。当你试图调试一些东西而不知道发生了什么时,它是非常有用的。你可以找到更多的here。
谢谢。
发布于 2010-10-21 05:19:16
通过正确地实现安全性。如果像Snoop这样的工具可以破坏你的“安全性”,那么你就做错了。
假设有一个只有特定用户才能执行的命令。这听起来像是您在UI级别强制执行此操作的唯一位置(例如,通过禁用相应的按钮)。在这种情况下,您是对的-我可以很容易地使用Snoop来启用按钮并执行命令。但是,您应该在服务器上强制实施安全约束,或者如果没有服务器,则可能在命令执行逻辑中强制实施安全约束。基本上,安全性的实现应该尽可能接近你想要保护的东西。UI级的安全性仅仅是为了方便用户。
发布于 2010-11-13 15:23:42
实际上,有一种方法可以检测您的应用程序是否被snoop程序“窥探”。我将给出的解决方案不是灵丹妙药,如果有人真的想窥探你的应用程序,他们必须修改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仍然是正确的,因为安全不应该在UI级别实现,所以像Snoop这样的实用程序不应该导致任何安全漏洞。但至少这向您展示了如何防止人们“窥探”您的应用程序。
发布于 2015-11-05 00:03:47
一个非常好的问题得到了很好的回答,
我想添加一个永远不应该保存在您的datacontext中的密码示例,因为snoop还会检查UI的datacontext,因此如果您使用正确的控件PasswordBox,您会发现无法绑定password属性,这意味着即使您窥探应用程序,也无法获取密码,因为它没有保存在任何属性中
但是我们发现很多人试图创建一个工作环境(帮助者,行为,用户控制...)来绑定密码,但是他们忘记了snoop可以像这样获得密码
因此,您的服务器永远不应该信任您的客户端,每次它都应该检查正确的权限(因为我们可以使用Fiddler for exp嗅探客户端请求,然后重新构建客户请求以绕过客户端应用程序安全性)
https://stackoverflow.com/questions/3981959
复制相似问题