Asp.net 简明教程

ASP.NET - Security

在网站中实施安全性具有以下方面:

  1. Authentication :这是一个确保用户身份和真伪的过程。ASP.NET 允许四种类型的验证:Windows 验证窗体验证护照验证自定义验证

  2. Authorization :这是一个为特定用户定义和分配特定角色的过程。

  3. Confidentiality :它涉及加密客户端浏览器和 Web 服务器之间的通道。

  4. Integrity :它涉及维护数据的完整性。例如,实施数字签名。

Forms-Based Authentication

传统上,基于窗体的验证涉及编辑 web.config 文件并添加带有适当验证代码的登录页面。

可以编辑 web.config 文件,并在此文件中写入以下代码:

<configuration>

<system.web>
   <authentication mode="Forms">
      <forms loginUrl ="login.aspx"/>
   </authentication>

   <authorization>
      <deny users="?"/>
   </authorization>
</system.web>
...
...
</configuration>

上面代码片段中提到的 login.aspx 页面可能具有以下代码作为其背后的文件,其中将用于验证的用户名和密码硬编码到其中。

protected bool authenticate(String uname, String pass)
{
   if(uname == "Tom")
   {
      if(pass == "tom123")
         return true;
   }

   if(uname == "Dick")
   {
      if(pass == "dick123")
         return true;
   }

   if(uname == "Harry")
   {
      if(pass == "har123")
         return true;
   }

   return false;
}

public void OnLogin(Object src, EventArgs e)
{
   if (authenticate(txtuser.Text, txtpwd.Text))
   {
      FormsAuthentication.RedirectFromLoginPage(txtuser.Text, chkrem.Checked);
   }
   else
   {
      Response.Write("Invalid user name or password");
   }
}

请注意,FormsAuthentication 类负责验证过程。

但是,Visual Studio 允许你通过网站管理工具无缝轻松实施用户创建、验证和授权,而无需编写任何代码。此工具允许创建用户和角色。

此外,ASP.NET 提供了现成的登录控件集,其中包含为您执行所有任务的控件。

Implementing Forms-Based Security

要设置基于窗体的身份验证,您需要:

  1. 一个支持身份验证过程的用户数据库

  2. 使用该数据库的网站

  3. User accounts

  4. Roles

  5. 用户和组活动的限制

  6. 一个默认页面,用于显示用户的登录状态和其他信息。

  7. 一个登录页面,允许用户登录、找回密码或更改密码

要创建用户,请执行以下步骤:

Step (1) :选择网站 → ASP.NET 配置以打开 Web 应用程序管理工具。

Step (2) :单击安全选项卡。

security tab

Step (3) :通过选择“来自 Internet”单选按钮,将身份验证类型选择为“基于窗体的身份验证”。

authentication type

Step (4) :单击“创建用户”链接来创建一些用户。如果您已创建角色,您可以在此阶段将角色分配给用户。

create users link

Step (5) :创建一个网站并添加以下页面:

  1. Welcome.aspx

  2. Login.aspx

  3. CreateAccount.aspx

  4. PasswordRecovery.aspx

  5. ChangePassword.aspx

Step (6) :从工具箱的登录部分在 Welcome.aspx 上放置 LoginStatus 控件。它有两种模板:LoggedIn 和 LoggedOut。

在 LoggedOut 模板中,控件有一个登录链接;在 LoggedIn 模板中,控件有一个注销链接。您可以在“属性”窗口中更改控件的登录和注销文本属性。

login status control

Step (7) :在工具箱中将 LoginView 控件放置在 LoginStatus 控件的下方。在这里,您可以放置文本和其他控件(超链接、按钮等),这些控件根据用户是否登录而显示。

此控件有两种视图模板:匿名模板和已登录模板。选择每个视图并为用户编写一些要显示的文本。文本应放置在标记为红色的区域。

login view control

Step (8) :应用程序的用户由开发人员创建。您可能希望允许访问者创建用户帐户。为此,在 LoginView 控件下方添加一个链接,该链接应指向 CreateAccount.aspx 页面。

Step (9) :在创建帐户页面上放置一个 CreateUserWizard 控件。将该控件的 ContinueDestinationPageUrl 属性设置为 Welcome.aspx。

createuserwizard control

Step (10) :创建登录页。在该页面放置一个登录控件。LoginStatus 控件将自动链接到 Login.aspx。若要更改此默认设置,请在 web.config 文件中进行以下更改。

例如,如果您想将登录页命名为 signup.aspx,请将以下几行添加到 web.config 的 <authentication> 部分:

<configuration>
   <system.web>
      <authentication mode="Forms">
         <forms loginUrl ="signup.aspx" defaultUrl = “Welcome.aspx” />
      </authentication>
   </system.web>
</configuration>

Step (11) :用户经常忘记密码。PasswordRecovery 控件可以帮助用户获取对帐户的访问权限。选择登录控件。打开其智能标记,然后单击“转换为模板”。

自定义控件的用户界面以在登录按钮下面放置一个超链接控件,该控件应链接到 PassWordRecovery.aspx。

passwordrecovery control

Step (12) :在密码恢复页面放置一个 PasswordRecovery 控件。此控件需要电子邮件服务器将密码发送给用户。

passwordrecovery control2

Step (13) :在 Welcome.aspx 中的 LoginView 控件的 LoggedIn 模板中创建指向 ChangePassword.aspx 页面的链接。

changepassword control

Step (14) :在更改密码页面放置一个 ChangePassword 控件。此控件也有两个视图。

changepassword control2

现在运行应用程序并观察各个安全操作。

若要创建角色,请返回 Web 应用程序管理工具并单击“安全”选项卡。单击“创建角色”,并为应用程序创建一些角色。

web application administration

单击“管理用户”链接,并将角色分配给用户。

manage users

IIS Authentication: SSL

安全套接字层 (SSL) 是一种用于确保安全连接的协议。如果已启用 SSL,浏览器将加密发送到服务器的所有数据,并解密从服务器传来的所有数据。与此同时,服务器会对传到浏览器以及从浏览器传来的所有数据进行加解密。

安全连接的 URL 以 HTTPS 而非 HTTP 开头。使用安全连接的浏览器会显示一个小锁。当浏览器尝试通过使用 SSL 的安全连接首次与服务器通信时,服务器通过发送其数字证书来对其自身进行认证。

若要使用 SSL,您需要从受信任的证书颁发机构 (CA) 购买数字安全证书,并将其安装在 Web 服务器中。以下是一些受信任且信誉良好的证书颁发机构:

  1. www.verisign.com

  2. www.geotrust.com

  3. www.thawte.com

SSL 已内置在所有主流浏览器和服务器中。若要启用 SSL,您需要安装数字证书。各个数字证书的强度根据加密过程中生成密钥的长度而异。长度越长,证书也就越安全,因此连接也越安全。

Strength

Description

40 bit

受大多数浏览器支持,但易于破解。

56 bit

Stronger than 40-bit.

128 bit

极难破解,但并非所有浏览器都支持它。