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

  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. mongodb 32为安装

    启动命令:mongod --dbpath D:\MongoDB\data --logpath c:\MongoDB\log\mongod.log --journal 安装引擎: mongod --db ...

  2. webstorm 配置Vue.js 语法提示

    标签属性 v-text v-html v-once v-if v-show v-else v-for v-on v-bind v-model v-ref v-el v-pre v-cloak v-on ...

  3. Android 判断当前Fragment是否可见(Visible)

    判断当前Fragment是否可见 public abstract class BaseFragment extends Fragment { /** Fragment当前状态是否可见 */ prote ...

  4. js 常用排序整理

    排序: 1. 内部排序: (1). 交换排序: 1). 冒泡排序 稳定 一次比较相邻两个元素的大小,顺序错误的,将其位置互换 (从高位到低位 或者 从低位到高位) 初始版: var array = [ ...

  5. C#中将dll汇入exe z

    用了3层架构,运行目录下有很多dll文件,最终发布时,我打算将dll文件都合并到exe文件中去.微软发布的免费软件ILmerge可以完成这项工作,研究了一下,其用法如下: 1.合并file1.dll. ...

  6. adb工具包使用方法

    ADB工具包总共有四个文件,两个exe后缀,两个dll后缀.里面还带有fastboot.exe下载后在PC上安装,如安装到D:\adb_tools-2.0目录,确认目录中带有fastboot.exe文 ...

  7. FPGA----只读存储器(ROM)

            ROM是一种重要的时序逻辑存储电路,它的逻辑功能是在地址信号的选择下,从指定存储单元中读取相应的数据.R0M只能进行数据的读取,而不能修改或写人新的数据,本节将以16×8的ROM为例, ...

  8. May 26th 2017 Week 21st Friday

    One thorn of experience is worth a whole wilderness of warning. 一次痛彻心扉的经历,抵得上千百次的告诫. Several days ag ...

  9. JsonResponse、FileResponse和StreamingHttpResponse

    一.JsonResponse对象 class JsonResponse(data,encoder=DjangoJSONEncoder,safe=True,json_dumps_params=None, ...

  10. OC 内存管理(retain和release)

    内存管理 retain和release简单使用 #import "Student.h" @implementation Student @synthesize age = _age ...