asp.net网站全局控制文件内注册事件
在管理ASP.NET网站的时候,有时会对网站整体做出控制,这时把这些代码写在global.asax内可以做到全局控制。
未添加任何代码的global.asax文件如下:
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
}
void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
}
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
}
void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
}
void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不引发该事件。
}
</script>
假设,我们要做网站安全处理,禁止客户端访问网站的某些目录,比如日志目录,上传文件目录等。
在global文件里,重写一下Inti() 方法,然后在Init()方法里注册一个处理禁止访问目录的事件,代码如下
public override void Init()
{
base.BeginRequest += BeginRequestEventHandler;
}
/// <summary>
/// 访问检测
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void BeginRequestEventHandler(object sender, EventArgs e)
{
//新写一个处理类,不要把global文件弄得很乱
GlobalCheck globalCheck = new GlobalCheck();
globalCheck.RequestLogCheck(sender);
}
////////////////////////////////////////////////////////////////////处理类代码如下
public class GlobalCheck
{
/// <summary>
/// 检测是否访问了日志目录
/// </summary>
/// <param name="sender"></param>
public void RequestLogCheck(object sender)
{
HttpApplication app = sender as HttpApplication;
var requset = app.Context.Request;
string[] reqURL = requset.Url.AbsolutePath.Split('/');
List<string> forbidden = ForbiddenDir();
foreach (string item in reqURL)
{
if (forbidden.Contains(item))
{
app.Response.StatusCode = 404;//HTTP状态码标记为404
app.Response.End();
break;
}
}
}
/// <summary>
/// 文件上传检测
/// </summary>
public void RequestFileCheck(object sender)
{
HttpApplication application = sender as HttpApplication;
string AllowFileExten = "jpg|jpeg|ico|icon|png|gif|bmp|rar|zip|7z|doc|docx|xls|xlsx";
List<string> AllowFileList = new List<string>();
foreach (string item in AllowFileExten.Split('|'))
{
AllowFileList.Add(item);
}
HttpFileCollection HFC = application.Request.Files;
if (HFC.Count > 0)
{
for (int i = 0; i < HFC.Count; i++)
{
HttpPostedFile tempFile = HFC[i];
string fileName = tempFile.FileName;
string MIME = tempFile.ContentType;
string fileExt = System.IO.Path.GetExtension(fileName).ToLower().TrimStart('.');
if (!AllowFileList.Contains(fileExt))
{
application.Response.Status = "403 Forbidden";
application.Response.StatusCode = 403;
application.Response.End();
}
}
}
}
/// <summary>
/// 禁止访问目录列表
/// </summary>
/// <returns></returns>
private List<string> ForbiddenDir()
{
List<string> list = new List<string>();
list.Add("Log");
return list;
}
}
asp.net网站全局控制文件内注册事件的更多相关文章
- ASP.NET 网站在域环境内配置授权访问
在 IIS 中,通常需要配置域中的某些用户或者用户组有权限访问部署的 WEB 站点或者 WEB 服务.我们知道要实现这种功能可以有如下几种方式: 代码,获取当前用户,到域服务器上去验证当前用户是否为合 ...
- asp.net网站中增删文件夹会导致Session或cache等等丢失
因为这会导致网站资源本身重新加载. 如果要改变文件和文件夹,一般应该是对 app_data 下进行操作.
- 关于ASP.NET 中 Global.asax 文件的后台事件处理程序
Global.asax.cs中的事件处理程序,像 Application_Start.Application_Error 等,这些名称和事件都是怎么来的呢? MSDN上的这篇文章描述了相关的内容: h ...
- 实现对ASP.NETMvc及Asp.NetCore的权限控制
AccessControlHelper Build Status Intro 由于项目需要,需要在 基于 Asp.net mvc 的 Web 项目框架中做权限的控制,于是才有了这个权限控制组件. 项目 ...
- Day10文件内指针移动和函数
强调:只有t模式下的read(n),n代表字符个数,除此以外都是以字节为单位 ,例如f.read(4)读出4个字符 控制文件内指针的移动:f.seek()以字节为单位 f.tell()文件开头为准,当 ...
- 【等待事件】等待事件系列(3+4)--System IO(控制文件)+日志类等待
[等待事件]等待事件系列(3+4)--System IO(控制文件)+日志类等待 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可 ...
- Oracle 无备份情况下的恢复--控制文件/数据文件
13.3无备份恢复控制文件 没有备份恢复控制文件其实就是在nomount状态,create control创建一个新的控制文件. dba必须知道4个信息才能正确的创建:数据库名.在线日志路径及其大小. ...
- JS——行内式注册事件
html中行内调用function的时候,是通过window调用的function,所以打印this等于打印window,所以在使用行内注册事件时务必传入参数this <!DOCTYPE htm ...
- ASP.NET应用程序和ASP.NET网站所共有的文件: App_Browsers 等
App_Browsers 包含 ASP.NET 用于标识个别浏览器并确定其功能的浏览器定义 (.browser) 文件.有关更多信息,请参见浏览器定义文件架构(browsers 元素)和如何:在 A ...
随机推荐
- BZOJ5125: [Lydsy1712月赛]小Q的书架【决策单调性优化DP】【BIT】【莫队】【分治】
小Q有n本书,每本书有一个独一无二的编号,现在它们正零乱地在地上排成了一排. 小Q希望把这一排书分成恰好k段,使得每段至少有一本书,然后把每段按照现在的顺序依次放到k层书架的每一层上去.将所有书都放到 ...
- 2018-2019-2 《网络对抗技术》Exp4 恶意代码分析 20165222李勖
1.系统运行监控 (1)使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间并分析该文件,综述一下分析结果.目标就是找出所有连网的程序,连了哪里,大约干了什么( ...
- TCP滑动窗口与回退N针协议
[转]TCP 滑动窗口协议/1比特滑动窗口协议/后退n协议/选择重传协议 2014-1-5阅读884 评论0 本文转自 http://www.cnblogs.com/ulihj/archive/201 ...
- python的继承顺序
python的继承顺序 python 创建类时分为新式类和旧式类 class A: # 经典类 def __init__(self): pass # 新类,可以在这里加 __metaclass__ = ...
- windows常用DLL及作用
Kernel.dll:内存,硬盘灯硬件管理的相关函数. gdi32.dll:图形显示相关函数(LoadImage,GetPixel,StretchBlt,Ellipse). user32.dll:wi ...
- node.js + express 初体验【hello world】
[node.js] 一个神奇的XX 呵呵 :) 不知道怎么形容他才好! [express] 是node.js 开发web应用程序的框架 开发环境:XP 大家共同进步吧 :) 一:前期准备: 1:下载 ...
- The type org.springframework.context.support.AbstractApplicationContext cannot be resolved
在 myeclipse中,使用 jdk6和7,并使用 spring-framework-5.0.2.RELEASE 时,编写代码: import org.springframework.context ...
- Oracle 取某100天的每一天的日期
SELECT TO_DATE('2016-01-01', 'yyyy-MM-dd') + ROWNUM - 1 as daylist,TO_DATE('2016-01-01', 'yyyy-MM-dd ...
- 0122(本来是想ak的但是因为智障只拿了200。)
今天考了一场小测试,额,非常非常水,但是智障的我才A掉两道题. T1: 1.暑假作业 (mtime.pas/c/cpp) [问题描述] 暑假作业是必须要写的,越到假期结束前,写作业的效率就越高,小 ...
- 【POJ】2778 DNA Sequence(AC自动机+矩阵快速幂)
题目 传送门:QWQ 分析 对着Trie图搞快速幂. 为什么这样是对的呢? 详见:http://www.matrix67.com/blog/archives/276 有些地方还不是很理解......为 ...