ASP.NET安全验证
一、为什么要用安全验证,使用安全验证有什么好处。
- 构造特殊的链接地址,导致文件内的数据泄露
- 数据库泄露
- 安全防范的首要策略:所有的HTTP访问都要经过IIS,所以限制IIS的安全性是关键
二、安全验证有哪几种?
如果资源请求一个ASP页面,则IIS将请求经过身份验证用户(或匿名用户)的安全令牌一起传递给ASP.NET,接下来发生的事情就取决于ASP.NET的配置
| 方式 | 描述 |
| 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安全验证的更多相关文章
- Asp.net MVC验证哪些事(2)-- 验证规则总结以及使用
上篇文章Asp.net MVC验证那些事(1)-- 介绍和验证规则使用中,介绍了Asp.net MVC中的验证功能以及如何使用.这里将对MVC中内置的验证规则进行总结. 一,查找所有验证规则 上篇文章 ...
- Asp.net MVC验证那些事(4)-- 自定义验证特性
在项目的实际使用中,MVC默认提供的Validation Attribute往往不够用,难以应付现实中复杂多变的验证需求.比如, 在注册用户的过程中,往往需要用户勾选”免责声明”,这个checkbox ...
- 【ASP.NET】编程点滴 :ASP.NET身份验证
ASP.NET实际开发中身份验证 是一个不可回避的问题.在相当一段长的时间内,由于不求甚解,我对这个话题似懂非懂.今天就对它做个简单的小结. Authentication and Authorizat ...
- asp.net检查验证字符串是否为纯数字方法小结
原文 asp.net检查验证字符串是否为纯数字方法小结 在asp.net中验证字符串是不是为数字我们没有像php中那么多丰富的函数来直接使用,这里我整理了一些比较实例的验证字符串是否为纯数字方法代码 ...
- ASP.NET没有魔法——ASP.NET 身份验证与Identity
前面的文章中为My Blog加入了文章的管理功能(ASP.NET没有魔法——ASP.NET MVC使用Area开发一个管理模块),但是管理功能应该只能由“作者”来访问,那么要如何控制用户的访问权限?也 ...
- ASP.NET MVC验证框架中关于属性标记的通用扩展方法
http://www.cnblogs.com/wlb/archive/2009/12/01/1614209.html 之前写过一篇文章<ASP.NET MVC中的验证>,唯一的遗憾就是在使 ...
- ASP.NET-internat身份验证
ASP.NET-internat身份验证默认在webconfig中配置的代码是这样的 <system.web> <compilation debug="true" ...
- asp.net 身份验证(Update)
ASP.NET 有四种 身份验证, 用的最广的就是 Froms 这几天 做项目 想用到 配置文件, 比较了 MVC 和ASP.NET 发现 还是 MVC 给力(MVC 叫做 过滤器 ...
- Asp.net MVC验证那些事(1)-- 介绍和验证规则使用----[转]--[并修改了部分内容]
Asp.net MVC验证那些事(1)-- 介绍和验证规则使用 -----原文地址链接 数据的有效性验证,是程序开发中必不可少的环节.这篇文章,我们将用一个实例来说明如何在MVC中使用Validati ...
随机推荐
- 10th week task -3 Arrow function restore
Arrow function restore 为什么叫Arrow Function?因为它的定义用的就是一个箭头: x => x * x 上面的箭头函数相当于: function (x) { r ...
- 通过 Powershell 来调整 ARM 模式下虚拟机的尺寸
需求描述 在部署完 ARM 模式的虚拟机以后,可以通过 PowerShell 命令来调整虚拟机的尺寸,以下是通过 PowerShell 命令来调整 ARM 模式的虚拟机尺寸. Note 本文只限于 A ...
- Bootstrap Table的使用小结
1.Jquery中的一些东西学习一下子,补充完善一下,毕竟有些时候没有使用到 这个方式很有用,在使用bootstrap table的时候,选择当前已经选择的节点的事件中的ID的值 当前rows中有很多 ...
- Android NDK r8 Cygwin CDT 在window下开发环境搭建 安装配置与使用 具体图文解说
版权声明:本博客全部文章均为原创.欢迎交流.欢迎转载:转载请勿篡改内容,而且注明出处,谢谢! https://blog.csdn.net/waldmer/article/details/3272500 ...
- BZOJ3531:[SDOI2014]旅行(树链剖分)
Description S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足 从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰 ...
- 昨天刚看了Handler和HandlerThread这个东西,不明白为什么要用这么复杂的东西,而且Handler直接post的话好像还不是子线程运行。那我再开发的时候直接用Thread行不行?两个有什么区别?
Handler就是android中一个机制,主要是考虑到线程安全的! Handler是可以实现线程间通信的,LZ知道Android的UI线程不安全的吧,也就是说不可以在UI线程以外的其他线程对UI进行 ...
- HDU 5258 数长方形【离散化+暴力】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=5258 数长方形 Time Limit: 2000/1000 MS (Java/Others) Me ...
- 【luogu P1972 [SDOI2009]HH的项链】 题解
题目链接:https://www.luogu.org/problemnew/show/P1972 真是不懂为什么要卡莫队! #include <cmath> #include <cs ...
- flume ng 1.3 安装(转)
http://blog.csdn.net/hijk139/article/details/8308224 业务系统需要收集监控系统日志,想到了hadoop的flume.经过试验,虽说功能不算足够强大, ...
- 02_Linux 终端命令格式
01. 终端命令格式 command [-options] [parameter] 说明: command:命令名,相应功能的英文单词或单词的缩写 [-options]:选项,可用来对命令进行控制,也 ...