ASP.NET安全验证

一、为什么要用安全验证,使用安全验证有什么好处。

 

  1. 构造特殊的链接地址,导致文件内的数据泄露
  2. 数据库泄露
  3. 安全防范的首要策略:所有的HTTP访问都要经过IIS,所以限制IIS的安全性是关键

二、安全验证有哪几种?

如果资源请求一个ASP页面,则IIS将请求经过身份验证用户(或匿名用户)的安全令牌一起传递给ASP.NET,接下来发生的事情就取决于ASP.NET的配置

 

目前ASP.NET支持4种安全验证
方式 描述
Windows IIS验证,在内联网环境中非常有用
Passport 微软集中式身份验证,一次登录便可访问所有成员站点,需要收费
Form 窗体验证,验证帐号/密码,Web编程最佳最流行的验证方式
None 表示ASP.NET自己根本不执行身份验证,完全依赖IIS身份验证

最常用最好用的就是Form验证的啦,下面具体讲解Form验证

三、Form安全验证工作原理及属性

1、Form安全验证的工作原理:

2、Form安全验证的重要属性:

 

属 性

说 明

name

这是赋予 cookie的名字,该cookie用于在请求之间保存用户。该默认值是 .ASPXAUTH

loginUrl

如果没有找到有效的验证 cookie,就指定请求重定向的URL

protection

指定要应用于验证cookie的保护级别,它有4个设置

All:应用程序使用数据有效性验证和加密机制来保护 cookie。这是默认设置。

None:不加密 cookie

Encryption:加密 cookie,但不对它进行数据有效性验证。

Validation:进行数据有效性验证,但不加密 cookie

path 

指定应用程序所存储cookie的路径。在大多数情况下应用/,它是默认设置

timeout 

指定cookie过期的时间(分钟),其默认值为30分钟

cookieless

制定在进行验证和授权过程中,基于窗体的身份验证过程是否使用cookie

defaultUrl

指定默认的URL

domain

指定要与窗体身份验证一起发送的域名

四、Form使用及例子

 

一、添加四个页面*.aspx。

 

二、修改Web.config配置文件(通过账户控制用户权限)

<!--Form验证配置-->

    <!--
      authentication配置节
      name:cookie名字
      mode:认证的模式
      loginUrl:未认证的用户登录的页面
      defaultUrl:认证成功后默认跳转的页面
    -->
    <authentication mode="Forms">
      <forms name="admin" loginUrl="Login.aspx" defaultUrl="IndexView.aspx">
        <!--
          credentials配置节
          passwordFormat:加密方式
          Clear:明文
          MD5:加密算法,比SHA1性能高
          SHA1:加密算法
        -->
        <!--添加三个明文密码的账户-->
        <credentials passwordFormat="Clear">
          <user name="admin" password="123456"></user>
          <user name="马春海的CSDN博客" password="123456"/>
          <user name="user" password="123456"/>
        </credentials>
      </forms>
    </authentication>
    <authorization>
      <!--allow:允许进入的账户
        deny:禁止进入的账户-->

      <!--只允许admin和马春海的CSDN博客进入-->
      <allow users="admin,马春海的CSDN博客"/>
      <deny users="?,*"/>
    </authorization>

三、页面的源码*.aspx

 

3-1、Login.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="ASP.NET_Form安全验证._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <h1>请先进行登录!</h1>
        帐号:<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
        <br />
        密码:<asp:TextBox ID="txtPwd" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="Login" runat="server" Text="登录" onclick="Login_Click" />
    
        <asp:Button ID="btnMD5" runat="server" Text="MD5加密" onclick="btnMd5_Click" />
    
    </div>
    </form>
</body>
</html>

3-2-1、Login.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;

namespace ASP.NET_Form安全验证
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Login_Click(object sender, EventArgs e)
        {
            string name = txtName.Text;
            string pwd = txtPwd.Text;
            //对照配置文件来验证密码是否正确,正确返回true 错误返回false
            if (FormsAuthentication.Authenticate(name, pwd))
            {
                //把请求当前Login.aspx 重定向到最初的请求资源(是否长久保存cookie)
                FormsAuthentication.RedirectFromLoginPage(name, false);
            }
                //密码不正确
            else
            {
                Response.Write("<script>alert('帐号或密码不正确!')</script>");
            }
        }
        //MD5加密
        protected void btnMd5_Click(object sender, EventArgs e)
        {
            string pwd = txtPwd.Text;
            //将加密后的密码输出(加密方式MD5或者SHA1)
            Response.Write(FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "MD5"));
        }
    }
}

3-2、Manage.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Manage.aspx.cs" Inherits="ASP.NET_Form安全验证.Manage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <h1>这里是管理员界面</h1>
    </div>
    </form>
</body>
</html>

3-3、User.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="User.aspx.cs" Inherits="ASP.NET_Form安全验证.User" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <h1>这里是用户界面</h1>
    </div>
    </form>
</body>
</html>

3-4、IndexView.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="IndexView.aspx.cs" Inherits="ASP.NET_Form安全验证.IndexView" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <h1>登录成功之后显示的页面</h1>
    </div>
    </form>
</body>
</html>

四、浏览

当直接执行manage.aspx的时候,Form验证便会起作用,将会阻止匿名用户进入manage.aspx。

阻止匿名用户就是配置文件里面的 “ <deny users="?,*"/>"。

执行后并没有进入manage.aspx而是进入的Login.aspx,地址也发生了变化,蓝色框里面的ReturnUrl是要进入的网页。

输入在配置文件设置的账号密码,登录成功之后进入蓝色框的地址,也就是manage.aspx直接执行的网页

进入管理页面。

当使用不允许账号访问时,没有反应

五、密码加密

 

加密方式及描述
加密方式  描述
Clear 密码存储为明文。用户的密码直接与这个值比较。
MD5 密码使用散列摘要进行存储。使用MD5算法进行散列,再与这个值进行相等比较。这个算法比SHA1的性能好。
SHA1

密码使用SHA1散列摘要来存储。在验证证书时,用户密码使用SHA1算法进行散列,再与这个值进行相等比较。这个算法的安全性最高。

例子中所有的密码都是"123456",转化成"MD5"就是"E10ADC3949BA59ABBE56E057F20F883E"

当使用MD5加密方式时,配置文件的加密方式要修改成"MD5",同时密码也要修改成"123456"的"MD5"方式E10ADC3949BA59ABBE56E057F20F883E

  <credentials passwordFormat="MD5">
          <user name="admin" password="E10ADC3949BA59ABBE56E057F20F883E"></user>
          <user name="马春海的CSDN博客" password="E10ADC3949BA59ABBE56E057F20F883E"/>
          <user name="user" password="E10ADC3949BA59ABBE56E057F20F883E"/>
        </credentials>

六、通过文件夹设置权限

当账号很多的时候,不太可能一个一个加权限,这时候就可以用location

添加两个文件夹,user、admin

配置文件location节点设置

  <!--
      path:对指向的路径进行限制(某个文件夹或者页面)
      allow:允许访问的用户
      deny:不允许访问的用户
      ?:未登录的用户
      *:所有用户
  -->
  <location path="user/User.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="admin/Manage.aspx">
    <system.web>
      <authorization>
        <allow users="马春海的CSDN博客"/>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>

这样写之后所有的用户都可以直接访问user.aspx,而manage.aspx只有“马春海的CSDN博客”可以访问。admin也访问不到了。

 

posted @ 2018-04-13 14:01  马春海的编程博客  阅读(606)  评论(1编辑  收藏  举报