
常用软件类: |
|杀毒安全 | |联络聊天 | |网络软件 | |多媒体类 | |系统工具 | |图形图像 | |系统工具 | |应用软件 | |行业软件 |
开发设计类: |
|动画制作 | |图像处理 | |3D设计 | |操作系统 | |站长学院 | |网络相关 | |WEB设计 | |数据库类 | |程序开发 |
安全规划
Microsoft 有一个关于安全性与软件这一主题的歌诀:“Secure by design, secure by default, and secure by deployment(设计安全,默认安全和部署安全)”。即,在安全中设计,期待系统在默认情况下是安全的,以及创建可以在安全环境中成功部署的解决方案。安全始终是重要的。既然越来越多的软件要在公用的 Internet 上“生存”,编写安全的软件就更加关键。对于我们而言,幸运的是,.NET 运行时和 Windows 操作系统提供广泛的安全选项和功能,我们可以轻松地将其包含在我们的应用程序中。无需过分注重标识和消除联机解决方案中安全漏洞的细节,我们可以指出其中一些最常见的漏洞并指出我们的应用程序规划如何进行处理。
注意:有关可用选项的详细信息,请参阅 Microsoft Security Developer Center。
缓冲区溢出
这可能是已编译应用程序中最常见的安全漏洞。由于我们将使用 .NET 运行时,而它是设计用来在内存中安全运行的,因此不太可能发生缓冲区溢出。此外,我们使用 Microsoft Visual Basic? .NET 对解决方案进行编码,而 Microsoft Visual Basic? .NET 不像 C 或 C++ 那样容易受到缓冲区溢出问题的影响。但是,即使我们打算用 C++ 创建组件,我们还可以使用编译程序的特殊功能,GS 转换,来保护我们免受大多数缓冲区溢出的攻击。
数据库攻击
另一种常见的安全漏洞可能会使恶意用户获得访问存储在数据库中的原始数据的权限。为了防止黑客获得数据的控制权,我们仅使用 SQL Server 存储过程,而不使用“内联查询”。这样可以大大减少试图在输入流中插入其他 SQL 命令的攻击。我们还在程序中多个位置处使用输入验证,以确保所有输入仅包含有效的字符。
交叉站点脚本攻击
对 Web 应用程序进行的常见攻击还有一种,它涉及到用户在输入流中添加客户方脚本,这类攻击将执行附加的对话并诱骗用户将个人数据发送到黑客自己的 Web 站点。要解决这个问题,我们使用 ASP.NET 1.1 的一个新功能,过滤出这种恶意代码的所有输入,防止将它置入系统中。显示屏幕上还包含附加代码,它将自动禁用任何脚本或显示可能会插入到数据存储中的标记。
至此,我们已获得了应用程序的逻辑模型和物理模型,以及确保实现方案包含的安全功能清单。拥有了这些以及目标声明和用户方案,我们可以开始这次“编码前”探险的最后一部分了。
完成设计文档
在直接进入项目的编码部分之前,需要花一点时间实际勾画出应用程序的逻辑组件,这非常重要。在我们的示例解决方案中,我们要实现解决方案的三个逻辑组件:数据库、.NET 数据访问组件和 ASP.NET 用户界面。在下面几篇文章中,我们将非常详细地介绍如何实现这些组件。但现在,我们只是勾画出每个组件的大致轮廓,讨论过程中最重要的方面,即文档化组件间的交互。
数据库
对于 DotNetKB 应用程序,我们需要将数据存储在三张表中:主题、问题和回答(请参阅下图)。
图 3:主题、问题和回答表
我们需要使用存储过程,以使中间层组件也可以安全地访问数据。有关数据库的细节,我们将在下一篇文章中讨论。这里,我们只是指出:列出表名称及所有列细节、默认索引和存储过程列表的数据库文档,应该包含在一个完整的数据库设计文档中。即,文档中应该具有成功实现系统数据存储部分所需的详细信息。
注意:如果留心的话,您可能会注意到我们未提及将专家数据存储在数据库中。只是为了使项目更加有趣(同时给我们一个机会使用直接 XML 数据存储),我们将专家信息存储在一个 XML 数据文件中。
数据访问组件
数据访问组件设计文档描绘与数据存储系统的交互以及与用户界面的交互的所有细节。在有些系统中,数据访问组件实际上是处理过程中各种问题的多个程序集。例如,可能会有一系列业务规则呈现在与数据存储和检索完全独立的用户界面上。在这种情况下,将业务组件与数据访问组件分开实现可能比较明智。
在我们的示例中,实际实现的是两个单独的组件:Message 组件和 DataAccess 组件。如果在支持基于 XML 的数据的传输服务(例如 SOAP Web Service)中进行规划,这种面向消息的实现方案将会特别有成效。
消息组件
消息组件定义一系列用于在各图层之间传输数据的类。这些消息可以作为二进制或 XML 文本数据存在。消息图层的价值在于:保护系统的其余部分,使其独立于数据存储实现方案的具体细节,例如 SQL Server、XML 文件等。此外,通过实现消息图层而不是更复杂的“智能对象”库,我们的解决方案可以更轻松地支持那些不能同时发送数据和类级别逻辑的远程调用服务,例如 XML-SOAP。
下面是一个消息类示例,在该示例中实现了 Topic 消息及其集合:
Public Class Topic
Private _ID As Integer
Private _Title As String
Private _Description As String
Public Property ID() As Integer
Get
Return _ID
End Get
Set(ByVal Value As Integer)
_ID = Value
End Set
End Property
Public Property Title() As String
Get
Return _Title
End Get
Set(ByVal Value As String)
_Title = Value
End Set
End Property
Public Property Description() As String
Get
Return _Description
End Get