网站地图    收藏   

主页 > 后端 > 网站安全 >

C#版IIS守护者 - 网站安全 - 自学php

来源:自学PHP网    时间:2015-04-17 14:46 作者: 阅读:

[导读] 最近在黑防的网站上看到这样一则消息,国内数十大站点被黑,Discuz!开源惹的祸。是的,现在脚本的漏洞已经成为了网站安全的致命伤。对于管理员来说该怎么做呢?还是依靠IIS日志,...

最近在黑防的网站上看到这样一则消息,国内数十大站点被黑,Discuz!开源惹的祸。是的,现在脚本的漏洞已经成为了网站安全的致命伤。对于管理员来说该怎么做呢?还是依靠IIS日志,显然是不够的,我们要有我们自己的日志记录的工具。这就是今天我要说的用C#开发自己的IIS的监视软件。

连续监视的最好方法当然是WINDOWS服务,所以我们需要编写一个服务,当相关的改变事件发生时,才能很好的记录下来。
写服务程序与写一个.NET中应用程序相似。在VS.NET中开始一个新的服务应用程序,将其命名为wolf4652。VS.NET会自动创建service1.cs的类文件,该文件由ServiceProcess.ServiceBase派生而来,其中包括两个事件-----OnStart和OnEnd。我们首先要把service1.cs重命名为IISGuard因为当服务生成时会以类名字作为服务名。VS.NET中生成服务非常简单,只需重载几个虚函数即可。其中两个已经介绍过,还有两个为OnPause和OnContinue,非别代表着服务的启动停止暂停与继续。
说完了.NET的服务的生成,接下载是我们的下移为主角------FileSystemWatcher类。利用它可以监视不同类型的变化,包括删除,对现有文件的修改,属性的修改,文件和目录的修改,文件日期的变更,文件大小的改变以及文件和文件夹的改变。FileSystemInfo非常灵活。下面列入它的主要属性和事件:
EnableRaiseEvents 获取或设置一个值,该值指示是否启用此组件。
Filter 获取或设置筛选字符串,用于确定在目录中监视哪些文件
IncludeSubdirecties 获取或设置一个值,该值指示是否监视指定路径中的子目录。
NotifyFlay 获取或设置要监视的更改类型。
Path 获取或设置要监视的目录的路径。
表 1 FileSystemWatcher的属性
Changed 当更改指定 Path 中的文件和目录时发生。
Deleted 删除指定 Path 中的文件或目录时发生
Created 当在指定 Path 中创建文件和目录时发生。
Renamed 重命名指定 Path 中的文件或目录时发生。
表2 FileSystemWatvher的事件
首先我们先定义了两个私有string类型,非别作为我们的IIS的路径和我们要写日的日至的路径
private string iisPath=@"D:\Inetpub\wwwroot";
private string logFile=@"C:\logFile.log";
然后我们要在构造函数中加入初始化FileSystemWatcher的代码:
 
public IISGuard()
{
// 该调用是 Windows.Forms 组件设计器所必需的。
InitializeComponent();
this.fileSystemWatcher=new FileSystemWatcher();
this.fileSystemWatcher.Path=iisPath;
this.fileSystemWatcher.Filter="*.*";
this.fileSystemWatcher.IncludeSubdirectories=true;
this.fileSystemWatcher.Changed+=new FileSystemEventHandler(fileSystemWatcher_Changed);
this.fileSystemWatcher.Created+=new FileSystemEventHandler(fileSystemWatcher_Created);
this.fileSystemWatcher.Deleted+=new FileSystemEventHandler(fileSystemWatcher_Deleted);
this.fileSystemWatcher.Renamed+=new RenamedEventHandler(fileSystemWatcher_Renamed);
this.fileSystemWatcher.NotifyFilter=System.IO.NotifyFilters.DirectoryName|System.IO.NotifyFilters.FileName|System.IO.NotifyFilters.LastWrite|System.IO.NotifyFilters.LastAccess|System.IO.NotifyFilters.CreationTime;
}
大家可以看到,我们用它来监视iisPath下面所有的文件和文件夹的更改,我们订阅的Changed事件,会在当对所监视的目录中的文件或目录的大小、系统属性、上次写入时间、上次访问时间或安全权限进行更改时,将引发。Deleted事件会在删除文件或文件夹是发生。Created会在创建文件及文件夹时发生。Renamed会在重命名文件或文件夹时发生。
接下来就是我们的fileSystemWatcher_Changed函数了,它会在事件发生时写入我们的日志文件。
private void fileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
{
this.streamWriter=File.AppendText(logFile);
this.streamWriter.WriteLine(e.ChangeType.ToString()+":"+e.FullPath);
this.streamWriter.Close();
}
后面的三个事件处理大致相同,大家可以自己看源代码。我们还有一件事情需要完成,就是将我们的FileSystemWatcher与service结合起来。
首先我们需要在OnStart中启动我们的FileSystemWatcher实例。
protected override void OnStart(string[] args)
{
if(!File.Exists(logFile))
{
this.streamWriter=File.CreateText(logFile);
this.streamWriter.Close();
}
this.streamWriter=File.AppendText(logFile);
this.streamWriter.WriteLine("start at "+DateTime.Now.ToString());
this.streamWriter.Close();
this.fileSystemWatcher.EnableRaisingEvents=true;
}
我们首先检查了日志文件是否存在,不存在就创建它。其余OnStop等大家可以看源代码,基本上雷同,大家一看便会明白。
最后一点我要说的是服务的注册和运行。
1. 选择IISGuard类,转换到设计模式。
2. 在属性下面单击添加安装程序链接。.NET会自动添加两个组件:ServiceProcessInstaller和ServiceInstaller。
3. 选择serviceInstaller1项,更改其属性StartType为Automatic。即要其自动启动。
4. 单击serviceProcessInstaller1组件,将Account改为LocalHost,在本机上运行。
5. 编译便可生成.exe文件。
6. 用InstallUtil.exe工具来注册服务。如下
C:\WINDOWS\Microsoft.net\Frameword\v1.0.3512\InstallUtil.exe C:\wolf4652.exe
7.注册成功后,在服务里面将其开启就可以工作了。
好了,就到这里吧,祝大家万事如意。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论