BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Silverlight 5的安全性:为局域网而设计

| 作者 Jonathan Allen 关注 529 他的粉丝 ,译者 侯伯薇 关注 0 他的粉丝 发布于 2012年2月1日. 估计阅读时间: 6 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

Silverlight所扮演的角色一直为人所误解。人们最初认为Silverlight要和Flash竞争,但是Flash本身已经被HTML 5所取代。人们还认为它是一种交付跨平台应用程序的方式,但是iOS让这个希望也破灭了。让人奇怪的是,它在人们认为应该是WPF的领域——企业内部业务应用程序——中繁荣起来,而Silverlight 5中改进的安全性模型也反映了这一点。

Silverlight 2是人们普遍认可的第一个真正意义上的版本,它出现后不久,人们就想要了解交付传统样式应用程序的方法。这项特性叫做“浏览器之外(out-of-brwoser)”或者OOB,它最早是在Silverlight 3中提供的。但是早在发布之前,人们就开始要求访问COM。但是正如我们所知,考虑到安全性问题,在浏览器中访问COM是非常可怕的想法。尽管微软缓解了这个问题,并在Silverlight 4中添加了这个特性,但是仅针对OOB应用程序。

一旦Silverlight的开发者尝到了COM的甜头,他们就要求对底层操作系统由更多的访问权限。并且他们要求即便是在浏览器中运行,也要能够访问。所以我们现在有了带有p/invoke功能的Silverlight 5,它在浏览器之中拥有完全信任关系,这不仅仅是一种幻想,而且要成为一种公司的技术。有些人可能认为这是非常大胆的声明,但是了解一下更新的Silverlight安全性概览中所传达的信息,就会发现并不尽然。

在浏览器信任的应用程序中,和浏览器之外信任的应用程序一样,它们拥有其它权利,像访问文件系统和调用COM对象。在浏览器中,只有它们带有可信任发行商密钥的签名时,才能够带有信任关系运行,而这属于企业环境中组策略设置的一部分。它永远都不会提示用户赋权。

成为“可信任的发行商”并不像购买密码签名证书那样简单。想要被添加到那个列表中,用户需要手动导入证书,并使用为微软管理控制台所提供的snap-in功能来安装。在控制面板中并没有这个快捷方式;用户需要从命令行运行。

在Silverlight 4中,应用程序至少需要拥有管理员的权限。但那个限制已经被去掉了。

Silverlight 5不会去除管理员权限。在Silverlight 4中,如果以管理员权限运行Silverlight应用程序,那么Silverlight就会载入另一个受限的进程并结束原来的进程,从而移除管理员权限。受限的权限与Windows Vista及以上版本中的用户账户控制(User Account Control,UAC)限制类似。Silverlight 5摆脱了这种逻辑,并遵循了正常的操作系统规则,在Silverlight 5中,如果应用程序是作为管理员运行的,那么它就会带有管理员权限运行,如果没有作为管理员运行,那么就不会带有管理员权限运行。

代码签名

如果你在部署面向互联网的Silverlight应用程序,那么你就可以忽略所有受信应用程序的内容,但是还需要考虑很多安全性方面的指标。首先,微软建议你对所有Silverlight签名。“如果你无法使用证书颁发机构发布的签名,那么至少应该自己对应用程序签名,以避免有人在更新应用程序时进行中间攻击。”

重新部署(Re-hosting)

Silverlight应用程序所要面对的主要风险因素就是重新部署。有人可以创建钓鱼站点,在其中放置真正Silverlight应用程序的副本。然后服务调用会通过虚假站点跳转,这样用户名和密码就会泄漏。

降低这种攻击风险的一种方式是,进行检查以查看应用程序是从哪个页面载入的。如果不是从正确的域中载入,那么你就应该在启动的时候退出。

跨站点脚本攻击和页面/应用程序信任

默认情况下,Silverlight并不容易受到跨站点脚本攻击。然而,暴露脚本函数就会引入这个问题,特别是在那些函数调用XamlReader.Load或AssemblyPart.Load的时候。作为一种规则,所有带有ScriptableMemberAttribute标签的函数都可以从JavaScript调用,所以你应该仔细检查,看其中是否存在安全性漏洞。

另一种可能是引入了调用页面上JavaScript脚本的恶意Silverlight应用程序。为了减少这种可能,标签中的EnableHtmlAccess属性应尽可能显式地设置为false。(注: 当页面和应用程序来自于不同的域时,false是默认值。)

直接服务调用(Direct Service Invocation)

一种经常被忽略的攻击点是应用程序使用的服务调用。WCF没有一种可靠的方式用于检测web服务是否真正来自于Silverlight应用程序,所以你需要假设所有服务调用都可能是恶意的,并且要在服务器中再次执行在客户端已经完成的验证操作。

查看英文原文:Silverlight 5 Security:Designed for the Intranet

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT