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 ...
随机推荐
- javascript对象(3)
这个对象,不是那个对象,第三哦! 对象之间会存在继承,所以,来说一下他们之间存在的三种三种继承方式: 1.冒用继承 //创建了孙悟空构造函数 function Sun(change,weapon,gf ...
- ezdpl:完全依赖脚本和ssh的自动化部署方案
ezdpl是easy deployment的简写,使用简单的ssh和shell脚本来部署.升级.回滚和重新配置linux服务器. 重要提示:警告:这个项目还处于测试过程中,请仔细阅读说明,并且自己承担 ...
- Linux C -> symlink 和 readlink -> 符号链接
Linux C -> symlink 和 readlink -> 符号链接 -------------------------------------------------------- ...
- python memory-management
http://deeplearning.net/software/theano/tutorial/python-memory-management.html
- angularJS 单页面 两个及以上个 ng-app 的处理方式
<div ng-app="myApp1" ng-controller="myCtrl1"> 名: <input type="text ...
- C# 生成CODE128条码
using System; using System.Collections.Generic; using System.Data; using System.Drawing; namespac ...
- lucene4.6版本配置
1.官网下载lucene的最新版本,解压后会看到很多文件,我们现在需要: E:\lucene-4.6.0\demo\lucene-demo-4.6.0.jar; E:\lucene-4.6.0\cor ...
- elenium2学习(十六)-- 富文本(自动发帖)
前言 富文本编辑框是做web自动化最常见的场景,有很多小伙伴遇到了不知道无从下手,本篇以博客园的编辑器为例,解决如何定位富文本,输入文本内容 一.加载配置 1.打开博客园写随笔,首先需要登录,这里为了 ...
- mybatis 中map作为参数
public interface ICodeGenDao extends IBaseDao<AssetsAllocation, Long> { /*** * 生成主编码 * @param ...
- Redux概念简述
react可以写出一些比较简单的一些项目,但是只能写出很简单的一些项目,原因是什么呢,原因是react是一个非常轻量级的是视图层框架,打开官网可以看到大大的一行字,A JavaScript libra ...