Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight。安全问题_Silverlight_Security_Ssl - Fatal编程技术网

Silverlight。安全问题

Silverlight。安全问题,silverlight,security,ssl,Silverlight,Security,Ssl,请告诉我,Silverlight业务应用程序是否安全 据我所知,用户可以从加载应用程序的本地计算机缓存中获取.xap文件,或者如果已知文件名和位置(以HTML代码编写),则直接获取文件-只需在浏览器的地址栏中键入即可下载文件。(问题1:正常吗?或者,某些特定主机的设置可能会拒绝直接下载?) 最有趣的是,用户一旦下载网页,文件系统中就有一个.xap文件。现在问题2:用户是否可以打开(我是说,反编译)这个xap文件,从而获得大量数据,包括检查用户的特定角色等?在代码中,我定期检查特定角色中是否存在授

请告诉我,Silverlight业务应用程序是否安全

据我所知,用户可以从加载应用程序的本地计算机缓存中获取.xap文件,或者如果已知文件名和位置(以HTML代码编写),则直接获取文件-只需在浏览器的地址栏中键入即可下载文件。(问题1:正常吗?或者,某些特定主机的设置可能会拒绝直接下载?

最有趣的是,用户一旦下载网页,文件系统中就有一个.xap文件。现在问题2:用户是否可以打开(我是说,反编译)这个xap文件,从而获得大量数据,包括检查用户的特定角色等?在代码中,我定期检查特定角色中是否存在授权用户。根据这一点,它可能由不同的内容提供。p.s.当然,我知道服务器端按属性检查角色,但不知道这一点。另外,我使用MEF模块化,对于模块之间的通信,我使用了带有通信接口的全局库项目模块之间传递的信息是否可能被盗?

下一个。web.config文件包含一些应用程序设置,还包含一个包含登录密码信息的数据库连接字符串。有问题3:web.config,是否足够安全来存储此类数据?


最后一个问题是SSL连接。我知道,我需要为使用这个付费。无论如何,问题4:SSL it如何保护应用程序和包含数据(在业务应用程序中)?问题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客户端调用服务获取“客户”数据时,我还检查当前经过身份验证的用户是否有权查看数据(而不是查看屏幕)。

非常感谢您的回答!!这很有帮助!用户381624,你能告诉我更多关于:1。“并在请求/响应中添加一个自定义头,该头实际上是一个带有隐藏私钥的校验和,用于加密校验和。”-我不知道如何实现这个头。请,如果你有时间,给我一些建议或链接到样品。2.“在服务器上复制授权。”-您是指DomainService类中的两个属性,如[RequireAuthentication]和[RequireRole(“admin”)]?1。这取决于您用于与服务通信的客户端库,但所有客户端库都允许您访问底层WebRequest头,然后您可以添加自己的密钥/值对。例1b。校验和有很多变化,你不必走那么远。在一个应用程序中,我对其进行了设置,以便服务器在登录时向silverlight应用程序传递一个sessionkey(在我的例子中是timestamp)。然后,对于服务器的每个请求,客户机都会添加2个头->SessionKey:Value Encrypted SessionKey:Encrypted Value。服务器检查sessionkey是否仍然是当前的,然后