日期:2012-11-06 浏览次数:20817 次
.NET平台及其ASP+所提供的强大开发功能是每个程序员所不能忽视的,对某种语言的偏好不该影响选择最具效率的开发工具。而目前,ASP+确实提供了许多JSP所无法比拟的功能。
使用ASP+,你会真正感到使用语言的自由性,编程时在网页上可看到编译ASP+页中C#等语言时的全部编译信息,而且使用ASP+提供的数十种功能强大的服务器端控件,几乎可
以实现以前客户端RAD开发工具所能实现的全部功能,ASP+可以直接方便地使用.NET中的XML技术,使用几个简单的函数就可以用XML替代一些数据库或和其他程序交换信息。
对于未来,将有越来越多的语言支持ASP+的开发,而富士通美国子公司已经推出了Cobol for .NET,让Cobol也可以开发ASP+应用程序了。惟一遗憾的是,ASP+目前还不能跑在除Windows系列的其他平台上,但这正是.NET正在做的事。
基于上述优点,越来越多的Web应用将会使用ASP+方式开发,在具体实现如电子商务等应用时,必须重视各种安全性问题,此问题涉及操作系统、网络管理及程序安全等众多方面,限于篇幅,本文将介绍如何用ASP+的配置和程序实现安全身份验证。
ASP+的相关配置
ASP+的配置方法较特别,它使用config.web这个XML类型的文件来存储配置信息,你可用notepad或XML编辑器方便地修改其内容,规定的设置方式是子目录继承或者覆盖从父目录得来的配置设定,就是说在root目录下放了个config.web文件,那么任何下一级目录将自动继承这个文件中的配置,假如某个子目录需要另外的配置时,我们可再另建一个config.web放在该子目录下。这种配置管理方式对安装你的应用程序、配置的修改及安全管理都极为有利。
ASP+提供了三种主要的身份验证方式即:Windows、Cookie和Passport,Windows是指使用Windows自身的安全管理方式,你可通过设置Windows的用户及IIS等权限来保障安全,对于一些大应用,使用此方法将非常复杂和烦琐。Passport方式较为方便和安全,用户只用一个用户名和密码可以访问任何成员站,并且在注销离开时,所有Passport相关的信息都会清除,你可以在公共场所放心地使用它,相信Passport比较适合Internet的应用。在企业级应用中,使用Cookie方式和SSL、IP限制等一些网管技术同样可以实现一定的安全性。
下面介绍一下Cookie的配置:
你需建一个如下内容的config.web,并将它放在C:inetpubwwwroot(IIS缺省目录)下,对于系统安装时已经建立的config.web,一般在WINNTMicrosoft.NETFrameworkv...目录下。
<configuration>
<security>
<authentication mode="Cookie">
<cookie decryptionkey="autogenerate" loginurl="/login.aspx" cookie=".ASPXAUTH" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
</security>
</configuration>
该配置文件声明用Cookie方式验证,在你访问该目录及其子目录下的aspx文件时,如果你没有认证的Cookie,它就会重定向到login.aspx。如果你需要一个不需要身份认证的目录(可放用户申请的程序)则可建一个如下的config.web并放在该目录下:
<configuration>
<security>
<authorization>
<allow users="*" />
</authorization>
</security>
</configuration>
程序设计
你需在root目录下建立Default.aspx和login.aspx这两个ASP+程序。
login.aspx程序内容如下:
<%@ Import Namespace="System.Web.Security" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.ADO" %>
<html>
<head>
<title>Login</title>
<script language="C#" runat=server Debug="true">
void Login_Click(Object sender, EventArgs e) {
if(Page.IsValid)
{ ADODataReader dr;
//连接数据库,用户名和密码放在ODBC连接的数据库QCDB中的表Users中
ADOConnection cn = new ADOConnection("DSN=QCDB");
cn.Open();
ADOCommand cmdQuestion = new ADOCommand("SELECT Password FROM Usersswheresname = '" + YourName.Text + "'", cn);
//选择相应用户信息
cmdQuestion.Execute(out dr);
//建一个datareader得到SQL结果
if(dr.Read()) //得到对应的第一个行数据
if(dr["Password"].ToString() == Password.Text)
CookieAuthentication.RedirectFromLoginPage(YourName.Text, AbidingCookie.Checked);
else //上面语句生成一个Cookie,如用户选择AbidingCookie,则永久保存Cookie
Msg.Text = "密码错误";
else
Msg.Text = "用户名不存在";
}
}
</script>
</head><center><body>
<ASP:Label id="Msg" ForeColor="red" Font-Name="Verdana";
Font-Size="18" runat=ser