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 ...
随机推荐
- JS文本中间显示省略号
众所周知,文本溢出显示省略号用CSS就可以: 单行文本: white-space: nowrap; text-overflow: ellipsis; overflow: hidden; display ...
- 我为什么不用Django而用Flask?
前言 对于初学者来说,找到一个好的框架来学习或者项目开发都是非常有必要的,而当你有一定开发经验后,你应该选择适合当前业务需要的框架.我这里并不想探讨哪个框架好哪个不好,这个永恒的话题就跟探讨“世界上哪 ...
- 转:如何利用已有的切片文件生成TPK
Tpk是ArcGIS 10.1即将推出的一种新的数据文件类型,主要是用于将切片文件打包形成离线地图包.Tpk可以在ArcGIS Runtime中作为切片底图被加载.在ArcGIS 10.1中Tpk的生 ...
- Android 实现电话录音(窃听)
配置文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=&qu ...
- Android学习——ViewPager的使用(三)
这一节来介绍一下在ViewPager中常用到的一个控件,标题栏. 标题栏分为PagerTabStrip和PagerTitleStrip两种,用法类似,这里介绍第一种. 具体做法 在layout文件中的 ...
- Docker 容器中相关软件安装
Docker 容器中相关软件安装 1.介绍 我们从docker hub下载的centos镜像是只有很少的命令,需要单独安装我们所需的相关软件. 2.安装软件 安装yum-utils软件包 该软件包是辅 ...
- Zabbix监控 windows agent安装配置
下载Windows的zabbix客户端 载地址:http://www.zabbix.com/download.php 选择windows版本的agent下载 从官方下载Zabbix Agent后,压缩 ...
- CSS基础语法(一) CSS的3种引入
CSS样式表 CSS可算是网页设计的一个突破,它解决了网页界面排版的难题.可以这么说,HTML的Tag主要是定义网页的内容(Content),而CSS决定这些网页内容如何显示(Layout). Web ...
- leetcode 62、Unique Paths
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...
- POSIX 线程详解(经典必看)
http://www.cnblogs.com/sunminmin/p/4479952.html 总共三部分: 第一部分:POSIX 线程详解 ...