【IT168 专稿】在上篇中,我们以标签管理子模块和博客入口管理子模块为例探讨了系统中主要的管理页面设计的设计特征。在本系列这个最后一篇中,我们将讨论系统安全及错误处理模块设计的设计问题。
第一篇:基于ASP.NET 3.5与N层架构开发企业SNS
第二篇:用ASP.NET3.5开发SNS:用户接口页面设计
1.博客系统的安全性设计
直到现在,我们一点也没有讨论系统的安全性问题。但是,幸运的是,本博客系统的安全模型非常简单:
·仅有系统管理员可以使用系统中提供的一切管理功能。
·系统管理员数据定义和存储于本系统后台数据库的authors表格中。
·系统管理员在可以使用任何管理功能之前需要先登录并标识自己。一旦得到系统的认证,他们便可以使用系统中所有的功能。
(1)用户信息的安全存储
读者不难想像,实现这个模型并不困难。我们不妨先回顾一下作者(系统管理员)信息在博客系统中的管理方式。Author对象其实是很简单的:它们仅仅有一个用户名和一个口令。然而,以普通文本方式把口令存储到数据库中并不是明智的选择。这就是为什么我们在本系统中存储了口令的哈希值。通过对用户登录时的口令应用相同的哈希算法,我们便可以与数据库中存储的结果进行比较来判断是否用户提供了一个正确的口令。
但是,上面的安全措施仍然存在一定的脆弱性:如果有人能够设法访问到数据库并且看到了所有的哈希口令,那么他们可以运行一个暴力式字典攻击来把该口令通过逆向工程进行破解。通过为每一个哈希值提供一个唯一的“盐”(salt)值,便可以解决这个问题。
【注意】Salt,即“盐”,是哈希算法中的一个重要概念。实际开发中,服务器通常使用Hash算法(如sha1)把客户传过来的明文密码加密后,和用户名一起存入数据库。Salt是随机产生的字符串,与密码结合后,再加密,意在增加字典攻击的难度。
注意,生成盐化哈希值的逻辑编码位于Code/Utils/Hash.cs文件中。数据访问对象forAuthors的保存方法使用这一逻辑来存储用户。下面给出了文件Code/Data/Access/Author.db.cs中部分相关的代码片断:
t.salt = Hash.GenerateSalt(16);
t.password = Hash.HashPassword(myAuthor.password, t.salt);
最后,AdminAuthors.aspx页面和AdminAuthorEditNew.aspx页面能够使系统管理员管理所有的用户,具体实现细节读者可自行参考本文所附源码。
(2)认证问题
ASP.NET提供了多种不同的途径支持用户认证。通过前面的介绍,我们已经了解到我们使用了定制方式实现用户的管理。我们还不难得出这样的结论:既然本博客系统是一个因特网应用程序,那么这就排除了通过一个活动目录提供者使用Windows认证的选择。代之的是,我们将使用ASP.NET中的FormsAuthentication组件,并且还要使用一个定制的登录表单和成员身份提供者技术来实现用户认证。
首先,我们需要从配置文件web.config中启动表单认证支持,代码如下:
<forms loginUrl="~/View/Pages/Login.aspx"
protection="All"
timeout="30"
name="BlogoCookie"
requireSSL="false"
slidingExpiration="true"
defaultUrl="~/View/Pages/Admin/Admin.aspx"
cookieless="UseCookies"
enableCrossAppRedirects="false"/>
</authentication>
在文件web.config的上述配置节中:
·loginURL:指出我们的登录表单的地址。
·name:要使用的登录cookie的名称。
·defaultURL:一旦登录成功要导航到的地址。