领域 开发
主题 Windows Phone 8,应用安全,Windows 8,移动,安全
过去,有一个设想,仅仅流行的应用和服务才会被攻击。但是最近,即使是很少有人用甚至无人问津的服务,也很容易地受到黑客的仔细研究。在最近一次的Microsoft Build会议上, Josh Dunn讨论了一些在Windows 8应用中发现的常见漏洞。
避免乐观的错误
Windows 8 应用中,一个主要的漏洞来自不正确的使用MSApp类的execUnsafeLocalFunction方法。该功能在应用中禁止了脚本注入验证的规则,使应用与展现客户信息的网站面对相同的漏洞。
脚本注入一旦获得过多应用的许可之后,就会产生特别严重的问题。例如:假设某个应用具有访问用户图片库的能力。一旦黑客注入了脚本,那么,脚本也同样具有获取访问该图片库的权限。
虽然看上去是显而易见的,但是eval函数却是另一个能够将漏洞引入到应用中的危险功能。所以,一般情况下,微软劝告开发者,避免在程序中使用eval函数和带有unsafe关键字的功能代码。
使用javascript库时,需要特别当心。浏览器中使用安全的库,在windows 8应用中使用,却不一定是安全的。推荐使用WinJS,因为microsoft将它特别设计为“缺省安全的”。我们假设,随着时间的推移其它库将都采纳这一做法。
另一个减少问题的方式是减少应用可注册的能力。在许多情况下,应用实际上不需要使用这些能力。比如:应用无需使用“Documents”(Windows.UI.Xaml.Documents)组件加载并保存文档,只有当应用在库中扫描某一特定文件类型时才会使用它。
一个与此相关的问题是对文件扩展名的不必要注册,一个常见的错误是,因为应用将一些数据存储在文本文件中,就将此应用注册成文本文件处理器。导致的结果是,每当打开一个文本文件时,该应用就会被放进可启动的应用程序列表之中。这里的区别是“使用”文本文件和“处理”文本文件的能力。
其他开发者可能误开启的能力,如企业认证和共享用户证书。企业认证应当仅在企业内部应用访问域资源时使用。它使应用代表用户。共享用户证书是针对硬件证书和智能卡的。
处理客户数据的责任
当向用户请求数据时,重要的是从一开始就要建立信任关系。一部分是要确切地告诉用户,要收集什么样的数据,为什么要收集,用户如何退出正在进行的数据收集。应用程序应尽可能在无需私人身份信息的情况下工作。
在传输私人身份信息(PII)时,总是使用安全的连接。若允许信息以非加密的方式显现在URL中,就会导致许多问题。或者,更好的做法是,避免收集个人信息,比如序列号和IP地址。
规避这一问题的一种方式是,使用GetPackageSpecificToken方法。该令牌对于每一个应用/硬件键值对是唯一的,它可使你的应用在不使用任何个人身份信息的情况下识别给定的设备。不好的方面是,当多个应用一起工作时,它们需要一种将各自的令牌连接起来的方法。
当使用用户名口令模式工作时,要设法确保将它们存储在安全凭证存储器中(Windows.Security.Credentials)中,而不是文件或者应用环境中。
查看英文原文:http://www.infoq.com/news/2012/10/Win8-App-Security