JavaScript 安全性:Web 到 Windows 8: 安全性

作者:管理员 更新时间:2012-12-06 14:42

多年前,我认为学习如何打高尔夫是个不错的想法。我在注册学习本地一些驾驶培训课程前,从未加入过高尔夫俱乐部。在我的第一堂课中,教师问我是否学习过同类课程或打过高尔夫。我告诉他没有时,他说:“很好!我们将不必担心一些阻碍您进步的旧习惯了。”

Web 开发人员从浏览器过渡到 Windows 应用商店应用程序时会沿袭一些固有习惯。尽管 Web 开发人员可以利用现有的 JavaScript 知识,但由于新增了一些功能,因此需要转变思维方式。安全性就是这样一个有根本差异的功能。很多 Web 开发人员习惯将应用程序的安全性转交给服务器实现,他们给出诸如以下的理由:“何必麻烦呢?我们可以很轻松地绕过 JavaScript。”在 Web 客户端,安全功能仅被视为提高可用性的方法,无法增强 Web 应用程序的总体安全性。使用 Windows 8,JavaScript 通过提供保护数据、验证输入和分隔潜在恶意内容所需的工具,在确保您应用程序的总体安全性方面发挥重要作用。在本文中,我将向您介绍如何改变在 Web 开发过程中养成的一些习惯,以便使用 HTML5、JavaScript 和 Windows 运行时的安全功能生成更安全的 Windows 应用商店应用程序。

输入验证

Web 开发人员说:JavaScript 验证只用于改进使用性能,而不会增强应用程序的安全性。

Windows 8 开发人员说:使用 HTML5 和 JavaScript 进行验证是您防止恶意内容进入应用程序的第一道防线。

对 于传统 Web 应用程序来说,JavaScript 通常只是服务器的网关。所有对数据的重要操作(如输入验证和存储)都在服务器上进行。恶意攻击者可以在自己的浏览器上禁用 JavaScript 或直接提交精心设计的 HTTP 请求来绕过所有客户端保护机制。在 Windows 应用商店应用程序中,开发人员在对数据进行操作前不能依赖服务器来清理用户输入,因为没有服务器。要进行输入验证只能依靠 JavaScript 和 HTML5。

在软件安全性方面,输入验证是确保数据完整性的重要一环。没有它,攻击者就可以将每个输入字段作为可能攻击 Windows 应用商店应用程序的攻击矢量。在《编写安全的代码》第二版 (Microsoft Press, 2003) 中,作者 Michael Howard 和 Steve Lipner 提到: “所有输入在得到证明之前都是不可信的,”这已成为有关管理输入的名言。您不应信任任何数据,直到证 明它符合“已知有用”数据的规范。构建应用程序时,开发人员知道来自特定字段的数据应像什么(即允许列表),或至少知道它不应该包含什么(即拒绝列表)。 进行输入验证时,尽可能始终使用允许列表以将输入限制为已知的有用数据。通过只允许已知良好的数据,可降低缺少表述错误数据的新方式或未知方式的可能性。限制、拒绝和净化

开发人员如何通过将输入限制为已知的有用数据来降低带给用户的风险?他们使用图 1 中所示的三个输入验证阶段来降低恶意内容进入其应用程序的风险。

通 过将数据限制为“已知有用”的数据开始进行输入验证。熟悉 HTML5 的 Web 开发人员可以使用对其新输入类型和属性的现有知识来限制进入 Windows 应用商店应用程序的数据。Web 和 Windows 8 的主要区别在于 Windows 应用商店应用程序没有在后台检查输入的服务器。限制数据必须在 HTML5 或 JavaScript 中进行。

使用 HTML5,可以轻松将每个字段限制为已知的有用数据。为了说明本文中的示例,我使用了虚构的 Contoso Health 应用程序,它存储用户的个人健康信息。此应用程序的“个人资料”页捕获用户的名称、电子邮件地址、体重和身高,并提供一个包含一般信息的注释字段。作为开 发人员,我通常知道每个字段的有用数据是什么样的数据:

名称: 包含几个特殊字符的字母字符,最多不超过 45 个字符。名称条件基于应用程序的目标市场:美国市场。

电子邮件地址: 输入必须采用有效的电子邮件地址格式。

体重和身高: 带相关标签的数字,显示以英尺、英寸和磅为单位的数据。

注释: 使用标准 Contoso HTML 编辑器的 HTML 内容。

对于“名称”输入元素,我需要限制什么字符对于字段有效,以及该值的长度是多少。我可以使用 input 标记的两个新属性来做到这点: pattern 和 title。

pattern 是指输入的数据必须符合的正则表达式。MSHTML(Windows 8 中用于 HTML5 应用程序的呈现引擎)验证输入字段的数据是否与正则表达式匹配。如果用户输入不符合正则表达式模式的数据,提交表单将失败,并指导用户更正无效的字段。例 如,“名称”字段可以包含字母字符和空格,且只能包含 3-45 个字符。

来源:亦有软件
软件产品Eysln Software Product
亦有公告Eysln Notice
案例中心Eysln Template
知识库Eysln Knowledge Base
工具箱Eysln Toolkit Online