请告诉我,Silverlight业务应用程序是否安全?
据我所知,用户可以从加载应用程序的本地计算机缓存中获取 .xap 文件,或直接获取已知文件名和位置(以HTML代码编写) - 只需输入它将在浏览器和文件的地址栏中下载。 (问题1:这是正常的吗?或者,某些特定主机的设置可能会拒绝直接下载?)
最有趣的事情是 - 用户,一旦下载网页,在文件系统中有一个 .xap 文件。现在问题2:用户是否可以打开(我的意思是,反编译)此xap文件,从而获得大量数据,包括检查用户的特定角色等等?在代码中,我定期检查特定角色中是否存在授权用户。根据这一点,它可能由不同的内容提供。 p.s。当然,我知道服务器端检查角色的属性,演讲与此无关。另外,我使用MEF模块化,并且,对于模块之间的通信,我使用了具有通信接口的全局库项目。 模块之间传递的信息是否可以被盗?
下一步。 web.config 文件包含一些应用程序设置,还有一个带有登录密码信息的数据库连接字符串。有问题3:web.config,足以安全存储此类数据吗?
最后一个问题 - SSL连接。我知道,我需要付钱才能使用它。无论如何,问题4:SSL如何保护应用程序并包含数据(在业务应用程序中)?
答案 0 :(得分:2)
问题1.最终用户必须可以访问xap文件,因此我认为您不能阻止经过身份验证的用户从服务器获取该文件。即使它不可用,用户也可以在浏览器缓存中找到它。
问题2a。是的,用户可以反编译xap。它只是一个zip文件。重命名为zip,提取内容,使用Reflector等进行查看。使用Silverlight Spy进行游戏,您还可以看到一些有趣的内容。您可以在程序集上使用混淆工具,这是一种有用的威慑,但即使这样也可以由具有足够资源/能量的人反编译。
问题2b。我认为可以看到'模块之间传递信息',因为可以使用WinDbg调试Silverlight应用程序。再一次,混淆至少会有助于阻止偶然的内省。
问题3.是的,web.config应该是安全的,除非你不遗余力地公开它。
问题4. SSL不会阻止上面列出的xap文件中的任何内省问题,但会阻止人们嗅探流量。您将遇到的唯一问题是如何减轻中间人攻击中的人(代理人在其自己的证书中替换)。有很多方法可以缓解这种情况,但我不知道最好的做法。
根据您提出的问题,这是您应该缓解的风险。想象一下,用户连接到您的SL应用程序,登录,然后从服务器获取他们的“角色”。如果他们已经反编译您的xap,并且发现他们需要处于“管理员”角色以打开对所有内容的访问权限,他们可以在SL应用程序和服务器之间放置代理并修改响应以便SL应用程序认为他们处于“管理员”角色。这是最终用户试图入侵系统的中间人攻击。即使您使用SSL,这也是可能的,因为代理将使用自己的证书,最终用户可以将代理的证书添加到其受信任的证书存储中。
我从未能够在客户端正确解决上述风险。我通过使用模糊处理,并在请求/响应中添加自定义标头,这实际上是一个带有隐藏私钥的校验和来加密校验和,这让黑客变得困难。但是,如果最终用户设法对xap进行去混淆/反编译,他们理论上可以找到私钥并查看我的加密算法,因此能够在更改上述“角色”后替换新的校验和示例
总之,我已经得出结论,不可能正确地保护客户端。如果您认为风险充足,最好在服务器上复制授权。
例如,如果要求用户必须处于“管理员”角色才能查看“客户”,那么如果用户处于“管理员”角色,我将在客户端上显示“客户”屏幕。但是,在服务器上,当SL客户端调用服务以获取“客户”数据时,我还会检查当前经过身份验证的用户是否有权查看数据(而不是查看屏幕)。