好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

最近在黑防的网站上看到这样一则消息,国内数十大站点被黑,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.注册成功后,在服务里面将其开启就可以工作了。 好了,就到这里吧,祝大家万事如意。

查看更多关于C#版IIS守护者 - 网站安全 - 自学php的详细内容...

  阅读:47次