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

  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也访问不到了。

ASP.NET安全验证的更多相关文章

  1. Asp.net MVC验证哪些事(2)-- 验证规则总结以及使用

    上篇文章Asp.net MVC验证那些事(1)-- 介绍和验证规则使用中,介绍了Asp.net MVC中的验证功能以及如何使用.这里将对MVC中内置的验证规则进行总结. 一,查找所有验证规则 上篇文章 ...

  2. Asp.net MVC验证那些事(4)-- 自定义验证特性

    在项目的实际使用中,MVC默认提供的Validation Attribute往往不够用,难以应付现实中复杂多变的验证需求.比如, 在注册用户的过程中,往往需要用户勾选”免责声明”,这个checkbox ...

  3. 【ASP.NET】编程点滴 :ASP.NET身份验证

    ASP.NET实际开发中身份验证 是一个不可回避的问题.在相当一段长的时间内,由于不求甚解,我对这个话题似懂非懂.今天就对它做个简单的小结. Authentication and Authorizat ...

  4. asp.net检查验证字符串是否为纯数字方法小结

    原文  asp.net检查验证字符串是否为纯数字方法小结 在asp.net中验证字符串是不是为数字我们没有像php中那么多丰富的函数来直接使用,这里我整理了一些比较实例的验证字符串是否为纯数字方法代码 ...

  5. ASP.NET没有魔法——ASP.NET 身份验证与Identity

    前面的文章中为My Blog加入了文章的管理功能(ASP.NET没有魔法——ASP.NET MVC使用Area开发一个管理模块),但是管理功能应该只能由“作者”来访问,那么要如何控制用户的访问权限?也 ...

  6. ASP.NET MVC验证框架中关于属性标记的通用扩展方法

    http://www.cnblogs.com/wlb/archive/2009/12/01/1614209.html 之前写过一篇文章<ASP.NET MVC中的验证>,唯一的遗憾就是在使 ...

  7. ASP.NET-internat身份验证

    ASP.NET-internat身份验证默认在webconfig中配置的代码是这样的 <system.web> <compilation debug="true" ...

  8. asp.net 身份验证(Update)

    ASP.NET   有四种 身份验证, 用的最广的就是 Froms   这几天 做项目    想用到 配置文件, 比较了 MVC 和ASP.NET  发现 还是 MVC 给力(MVC 叫做 过滤器  ...

  9. Asp.net MVC验证那些事(1)-- 介绍和验证规则使用----[转]--[并修改了部分内容]

    Asp.net MVC验证那些事(1)-- 介绍和验证规则使用 -----原文地址链接 数据的有效性验证,是程序开发中必不可少的环节.这篇文章,我们将用一个实例来说明如何在MVC中使用Validati ...

随机推荐

  1. javascript对象(3)

    这个对象,不是那个对象,第三哦! 对象之间会存在继承,所以,来说一下他们之间存在的三种三种继承方式: 1.冒用继承 //创建了孙悟空构造函数 function Sun(change,weapon,gf ...

  2. ezdpl:完全依赖脚本和ssh的自动化部署方案

    ezdpl是easy deployment的简写,使用简单的ssh和shell脚本来部署.升级.回滚和重新配置linux服务器. 重要提示:警告:这个项目还处于测试过程中,请仔细阅读说明,并且自己承担 ...

  3. Linux C -> symlink 和 readlink -> 符号链接

    Linux C -> symlink 和 readlink -> 符号链接 -------------------------------------------------------- ...

  4. python memory-management

    http://deeplearning.net/software/theano/tutorial/python-memory-management.html

  5. angularJS 单页面 两个及以上个 ng-app 的处理方式

    <div ng-app="myApp1" ng-controller="myCtrl1"> 名: <input type="text ...

  6. C# 生成CODE128条码

    using System; using System.Collections.Generic; using System.Data; using System.Drawing;    namespac ...

  7. lucene4.6版本配置

    1.官网下载lucene的最新版本,解压后会看到很多文件,我们现在需要: E:\lucene-4.6.0\demo\lucene-demo-4.6.0.jar; E:\lucene-4.6.0\cor ...

  8. elenium2学习(十六)-- 富文本(自动发帖)

    前言 富文本编辑框是做web自动化最常见的场景,有很多小伙伴遇到了不知道无从下手,本篇以博客园的编辑器为例,解决如何定位富文本,输入文本内容 一.加载配置 1.打开博客园写随笔,首先需要登录,这里为了 ...

  9. mybatis 中map作为参数

    public interface ICodeGenDao extends IBaseDao<AssetsAllocation, Long> { /*** * 生成主编码 * @param ...

  10. Redux概念简述

    react可以写出一些比较简单的一些项目,但是只能写出很简单的一些项目,原因是什么呢,原因是react是一个非常轻量级的是视图层框架,打开官网可以看到大大的一行字,A JavaScript libra ...