作者在 2007-04-17 23:08:00 发布以下内容
1、关于登陆验证和授权
2、使用Forms验证模式
3、授权资源的访问
4、基于角色的授权
1、关于登陆验证和授权
很多网站都有登陆对话框,让事先已经注册的用户验证,以便为他们提供个性化的服务等。可以把这个过程看作是两件事情的发生:验证和授权!登陆的作用是验证请求登陆的用户是否合法,而授权则是验证合法的用户在请求资源时,根据他们的权限决定是访问还是拒绝。
以上这种网站本身提供对话框的作法在.NET中被称之为Forms验证模式,接下来将会讲述这种验证模式。在以前ASP陈序员或者其他程序员,要想保存合法用户的验证,在以后的访问授权中使用,不得不使用写或者将信息保存在Session中的方法,而在需要授权的页面加载前添加一堆繁琐的代码来验证制定的用户是否具有访问权限否则的话就不能显示页面的内容,最恼火的是在授权页面上添加这些代码让人觉得重复和繁琐,而且可能不是最安全的,有一些比较隐蔽的方式可能会轻易绕过这种验证,因此程序员将来要做的很多事情就是再修改代码已堵住在运行过程中才发现的漏洞。在.NET的System.Web.Security中提供了一些网站安全方面的解决方案,尽管验证用户合法和授权的基本思路没有变化,但是授权的工作几乎已经交给.NET框架了,我们些代码之需要自己验证用户合法,并且告诉框架这个用户合法即可。
2、使用Forms验证模式
要使用启用Forms验证模式,请在网站根目录下的web.config文件中添加如下配置:(注意区分大小写)
<configuration>
<system.web>
<authentication mode="Forms" />
</system.web>
</configuration>
这将告诉.NET,你的网站使用Forms验证模式,.NET将不参与验证用户的工作,而是将这个工作交给你完成,你必须自己编写一些代码来验证用户合法,并且报告给.NET用户是合法的。.NET将会发送一个验证到用户,随后的访问中,.NET以此为依据,来执行授权的操作。
例如我们在login.aspx界面中放置两个接受输入的文本框txtUserName和txtPassword,在数据库中,保存了用户名UserName和密码UserPassword,使用btnLogin按钮的Click事件来验证用户:
private void btnLogin_Click(object sender, EventArgs e)
{
string sql = "SELECT userid FROM Users WHERE UserName = '" + txtUserName.Text.Replace("'","_") + "' AND UserPassword = '" + System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "md5") + "'";
//使用上面类似的SQL语句向数据库执行查询,如果用户是合法的,将会返回数据。
if (...) //根据条件判定用户是合法的
{
//下面的语句告诉.NET发送一个验证给用户:
System.Web.Security.FormsAuthentication.SetAuth(userid, false)
Response.Redirect("afterlogin.aspx"); //定位到登陆后页面
}
else
{
//用户不合法,提示错误信息
}
}
以上代码中,
txtUserName.Text.Replace("'","_")将用户输入的文本中单引号替换为下划线,以防止SQL注入攻击。
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "md5")方法将txtPassword.Text转换为MD5散列值,注意,在用户注册的时候,同样使用此方法将其输入的注册密码转换为散列值存储在数据库中,这里将用户输入的散列值进行对比以决定是否合法用户。任何时候不要将敏感的文本信息以明文方式存放在数据库中。通过MD5加密,即便此密文被截获,攻击者仍无法获得真实的密码。
当确认用户验证是合法的,则调用System.Web.Security.FormsAuthentication.SetAuth(userid, false)方法,发送验证,此方法传递两个参数,一个是代表用户的标示,一般来说,在接下来确认用户唯一身份的就是从
2、使用Forms验证模式
3、授权资源的访问
4、基于角色的授权
1、关于登陆验证和授权
很多网站都有登陆对话框,让事先已经注册的用户验证,以便为他们提供个性化的服务等。可以把这个过程看作是两件事情的发生:验证和授权!登陆的作用是验证请求登陆的用户是否合法,而授权则是验证合法的用户在请求资源时,根据他们的权限决定是访问还是拒绝。
以上这种网站本身提供对话框的作法在.NET中被称之为Forms验证模式,接下来将会讲述这种验证模式。在以前ASP陈序员或者其他程序员,要想保存合法用户的验证,在以后的访问授权中使用,不得不使用写或者将信息保存在Session中的方法,而在需要授权的页面加载前添加一堆繁琐的代码来验证制定的用户是否具有访问权限否则的话就不能显示页面的内容,最恼火的是在授权页面上添加这些代码让人觉得重复和繁琐,而且可能不是最安全的,有一些比较隐蔽的方式可能会轻易绕过这种验证,因此程序员将来要做的很多事情就是再修改代码已堵住在运行过程中才发现的漏洞。在.NET的System.Web.Security中提供了一些网站安全方面的解决方案,尽管验证用户合法和授权的基本思路没有变化,但是授权的工作几乎已经交给.NET框架了,我们些代码之需要自己验证用户合法,并且告诉框架这个用户合法即可。
2、使用Forms验证模式
要使用启用Forms验证模式,请在网站根目录下的web.config文件中添加如下配置:(注意区分大小写)
<configuration>
<system.web>
<authentication mode="Forms" />
</system.web>
</configuration>
这将告诉.NET,你的网站使用Forms验证模式,.NET将不参与验证用户的工作,而是将这个工作交给你完成,你必须自己编写一些代码来验证用户合法,并且报告给.NET用户是合法的。.NET将会发送一个验证到用户,随后的访问中,.NET以此为依据,来执行授权的操作。
例如我们在login.aspx界面中放置两个接受输入的文本框txtUserName和txtPassword,在数据库中,保存了用户名UserName和密码UserPassword,使用btnLogin按钮的Click事件来验证用户:
private void btnLogin_Click(object sender, EventArgs e)
{
string sql = "SELECT userid FROM Users WHERE UserName = '" + txtUserName.Text.Replace("'","_") + "' AND UserPassword = '" + System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "md5") + "'";
//使用上面类似的SQL语句向数据库执行查询,如果用户是合法的,将会返回数据。
if (...) //根据条件判定用户是合法的
{
//下面的语句告诉.NET发送一个验证给用户:
System.Web.Security.FormsAuthentication.SetAuth(userid, false)
Response.Redirect("afterlogin.aspx"); //定位到登陆后页面
}
else
{
//用户不合法,提示错误信息
}
}
以上代码中,
txtUserName.Text.Replace("'","_")将用户输入的文本中单引号替换为下划线,以防止SQL注入攻击。
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "md5")方法将txtPassword.Text转换为MD5散列值,注意,在用户注册的时候,同样使用此方法将其输入的注册密码转换为散列值存储在数据库中,这里将用户输入的散列值进行对比以决定是否合法用户。任何时候不要将敏感的文本信息以明文方式存放在数据库中。通过MD5加密,即便此密文被截获,攻击者仍无法获得真实的密码。
当确认用户验证是合法的,则调用System.Web.Security.FormsAuthentication.SetAuth(userid, false)方法,发送验证,此方法传递两个参数,一个是代表用户的标示,一般来说,在接下来确认用户唯一身份的就是从