安全维护 IIS下 ASP 站点的高级技巧

一. 前言

  (仅以此文感谢好友bigeagle。不是他,我可能不用这么担心win2000安全问题的。呵呵!)

  人说,一朝被蛇咬,十年怕.....,就是这样。2000年初,当我终于摆脱winnt 4.0 server那可怕的补丁之旅,迈向win2000 server时。我终于可以比较放心我的服务器了。但随着SQL SERVER的补丁出现。我知道,与微软的补丁因缘又开始轮回了。但还好。win2000自动化的管理还是让我放心好多,而以前管理winnt后的失眠症状也逐渐消失了。偶尔还能见到我的"梦"老弟。但这一切都伴随者同bigeagle的一次知心交谈中付之东流了。一次,bigeagle发来qq,给我看了一段代码。我一看就知道这不是bigeagle写的代码,那么烂,不过有点熟悉。再一看,啊?!这不是我的数据库连接字符串吗!!GOD。顿时觉得有一种不祥的预兆。不过还好,这个只是个access的,我还用了一些手段防止他被下载。但这足以让我长时间的失眠又来了。(再次说明,bigeagle不是蛇,他是鹰)

二. 安装过程中的IIS 与 ASP安全防护

  (这里只考虑是Web服务器,而不是本地机子上的web开发平台。)
接下来的几天有是几个难熬的日子。我开始重新部署win2000 web服务器的安全策略。找到ASP代码被泄漏的原因。原来,我的补丁每次打得都比较及时的。但一次因为卸载FTP时,重装了IIS,而这之后,我并没有再打补丁而导致最新的漏洞web解析出错。(就是那个较新的漏洞 Translate :f, 用这个加上一些工具就可以看到ASP的代码了。)

  首先,开始重装IIS。

  这次安装的策略就是安全,够用。去掉一些多余的东西。

  1. FTP不要安装了,功能不好,还容易出错,并且漏洞很大。Ftp缺省传输密码的过程可是明文传送,很容易被人截获。(可以考虑用第三方工具。)

  2. 一切实例、文档也不要安装了。这是在web服务器上,最好不要这些例子,事实证明可以从这些例子站点突破IIS的防线的。

  3. 安装时选择站点目录,建议不要用缺省目录c:\inetpub,最好安装道不是系统盘的盘上。如:
d:\IISWEB,可以考虑自建目录。这样即使IIS被突破,也能尽可能的保护好系统文件了。

 4. 不要安装html的远程管理。html的远程管理在winnt 4.0还能用的上,但漏洞比较大,而且比较危险,端口号虽然是随机的,但很容易被人扫描道,从而留下隐患。事实上,我们可以通过另一台服务器上的IIS来管理他。这样比较安全。

  5. 多余的服务也不要安了,如NNtp,如果不做新闻组。就不要安了。smtp,如果有更好的邮件服务,也不要装它了。

  6. 索引服务器。这个索引真的是很有用,但我没有用过他。否则,你可以用他建立个整个站点的文件搜索的,但现在好像大多数的ASP网页都是一个网页,动态从数据库里查询。所以根本用不上索引服务器了,(不是索引不好,而是本身上面的那种ASP文件结构就不适合)所以可以不要安装。

三. 有目的进行安全配置

  ①、开发前的工作。

  首先,启动IIS后,看有没有\iissamples,\IIShelp,\msadc\,这些目录,如果有,他们大多是用来作为例子,帮助安装的,删掉他们,再把脚本库也删掉,直到web目录只留下干静的新建的虚拟目录即可。如果有管理的web站点,也删掉他。没有它,我们一样可以工作的更好。 还有看看有没有printer的文件夹,他们大多数都是些通过web来访问打印机的。MS就是怪。为了表示我的功力强大,允许通过web来远程打印。相信没有哪个网络公司是通过web网来打印的把。也不可能让网友来使用你的计算机吧。那好,去掉它。

  然后。开始详细配置各个web虚拟目录的安全。大概的策略是这样的。分类每个文件夹管理,如可以把扩展名是相同的分配到同一目录,如*.ASP的,和*.inc就尽量分开。如果是*.ASP的,则开放虚拟目录权限,但将实际目录权限授予administrator,system(完全控制)everyone (rc)即可。这样可以通过web允许读取。但实际上你可以加大安全力度,如果你认为它是比较保密的。如果是*.inc的,则开放目录权限,但不允许通过直接访问。这里又一个技巧了。比如,你可以允许实际目录被everyone访问,但在IIS中,你把改目录浏览项去掉,而包含文件只能被源文件读取,但不允许被直接读取。这样,黑客就不可能下载到你的单机数据库了,而且你的*.inc文件也不会被浏览器直接阅读。

  刚才我的老弟"梦"还在问我,有没有办法可以让别人看不到你的连接字符串,你可以试试下面的方法!
  1 首先建立连接字符串,并建立一个单独的文件*.inc(要是*.inc的,不要*.ASP的)你把你的连接字符串用变量复制进来。

  如:connstr=""Provider=SQLOLEDB.1;Password=passw;...................."

  2 然后建立一个文件夹include,放在根目录里。

  3 然后每一个文件用下面的办法打开连接。

  如:
  set conn=server.createobject("adodb.connection")
  conn.open connstr

  4 最后在iis里把include 文件夹用拒绝读的方法保护起来。你会发现,你的连接可以照常打开,但是如果对方看到你的源代码,他也看不到连接字符串,即使他看到了包含文件路径及名称。他也无法下载,或是用ie 打开。所以,可以保护你的连接字符串了。

  这里用的方法是NT权限与 IIS权限的共同审核。我们知道,为了让用户从web上访问道服务器的文件,每个安装了IIS后的服务器都会有两个内置账号。I_USExxxxxx,I_WAMxxxxxx(x为你的机器名),这样你就可以有的放矢地预防某些从你的web网络查看你的必要信息的用户了。

  当然,还有一些比较好的文件策略你可以参考一下:

  如:CGI (.exe, .dll, .cmd, .pl)Everyone (X)不允许读,只能运行。Administrators(完全控制)System(完全控制)。

  所以,你在编写ASP应用程序时,尽量归类好你的目录。方便用IIS和NT进行管理。

  如,采用下列结构比较好

  d:\web\ASPtest\static (放置*.htm)
  d:\web\ASPtest\script (放置*.ASP)
  d:\web\ASPtest\include(放置*.inc)
  d:\web\ASPtest\images (放置*.gif,*.jpg)

  这样你就可以用上面的方法来达到安全目的了。

 ②、启用日志监测

  这是亡羊补牢的好工具,至少你可以用它来监测谁通过web干了什么。当然,你还要保护该日志的权限只能是被系统管理员和超级管理所控制。这样避免某些人的干了某些事而不留痕迹。为了留好现场而又不影响IIS的响应速度,还是建议选则w3c扩展日志格式比较好。(以前别人介绍我用ODBC,看来比较方便,但实际上不是这样。它受到数据库的影响很大,而且速度较慢了)。

  可以考虑纪录下一下现场数据:

  客户 IP 地址 
  用户名 
  方法 
  URI 资源 
  HTTP 状态 
  Win32 状态 
  用户代理 
  服务器 IP 地址 
  服务器端口

  如果在一台计算机上有多个 Web 服务器,则后两种属性非常有用。Win32 状态属性对于调试非常有用。

  检查日志时,密切注意错误5 ,这意味着访问被拒绝。在命令行上输入 net helpmsg err,可找出其它Win32 错误的含义,其中 err 是要查找的错误号。

 ③、配置合适的脚本映射

  相信我,大部分的ASP源代码泄漏都是通过不安全或是有错误的脚本映射导致的。而他们中的大多数可能你用不到,如下面我说的:

  1 *.htr这是一个比较厉害的文件,他是web应用程序的一种。同hta一样。这是些比较厉害的功能,但介绍很少。hta就是一种html 格式的 application,功能比较强大。切安全性比htm要低。所以可能会导致功能强大的操作。比如htr就可以通过web来重设密码。相信我们大多数的ASP程序员和NT网管不需要这个。那好,把他的对应选项删掉好了。否则,任何人都可以通过你的web来进行非法操作,甚至格式化掉你的硬盘。

  2 *.hta 这个我已经说过了,他是把双刃剑,用的好,你可以通过他来访问nt的很多操作,在ASP上开nt用户也是可能的。但大多数的工作可以不通过web来事最好的。而*.hta在web很少用到,虽然他在iis4.0就推出了。比如,你把一个文件保存成*.hta,你就可以用ie打开。看看,很奇怪的界面吧。听ms的工程师说.net中把*.hta换了个说法,功能加大了。看来网管的工作又该加大了。如果你想安全一些,删掉吧。

  3 *.idc 这个东东是个比较老的数据库连接方法了,现在大多数都直接用ASP文件。不用idc了,所以删掉他。

  4 *.printer这个是打印机文件,去掉他好了

  5 *.htw , *.ida *.idq这些都是索引文件,也可以去掉了。

  ④、好的安全习惯

  要注意多上ms的站点,看看安全公告。(MS的访问量就是这样长期排行世界前三的!)还要准备好一些第三方的工具。如扫描工具,模拟攻击工具。多上安全站点看看。

  如果你可以交道一些比较好的黑道朋友(我另一个师兄家家的方法),也是比较好的。(黑道是黑客走的路!)

  ⑤、防止ASP代码被泄漏

  这里只能说是防止,我只有从已经发现的看ASP方法的漏洞入手,现在对于iis4.0则几乎有20种以上的办法,但安装了sp6a后有两种,可以到微软的网站安全公告下载2000-8月后的补丁可以解决。但如果你用了本文上面的方法。可以装到sp6就可以了。

  如果是win2000 server,则有两种方法。安了sp1后,还有一种,所以你必须倒微软安全公告栏去下载相应的hotfix。可以解决。

  ⑥、防止恶意的破坏

  这个功能能对付一些被你监测到的不良分子,你可以在日志中或第三方工具看到到底是谁在不停的探测、破坏你的IIS。那么把他列为不收欢迎的黑名单,这样,你再配置站点时可以对其IP或域进行拒绝访问,不过这一过程是要付出代价的,你的IIS要担任反向查找的功能。可能会比较耗时。

   ⑦、安全的话题

  以上还只是IIS与ASP的。如果你要用到数据库,用到远程管理,用到远程连接数据库,那还要分别注意。正如我说的,没有绝对的安全,而这也才是安全的需要。关于安全的话题,没有结束,只有待续。

(0)

相关推荐

  • 安全维护 IIS下 ASP 站点的高级技巧

    一. 前言 (仅以此文感谢好友bigeagle.不是他,我可能不用这么担心win2000安全问题的.呵呵!) 人说,一朝被蛇咬,十年怕.....,就是这样.2000年初,当我终于摆脱winnt 4.0 server那可怕的补丁之旅,迈向win2000 server时.我终于可以比较放心我的服务器了.但随着SQL SERVER的补丁出现.我知道,与微软的补丁因缘又开始轮回了.但还好.win2000自动化的管理还是让我放心好多,而以前管理winnt后的失眠症状也逐渐消失了.偶尔还能见到我的"梦&qu

  • 各版本IIS下ASP.net请求处理过程区别第1/3页

    绝大多数的人只熟悉高层的框架如: WebForms 和 WebServices --这些都在ASP.NET层次结构在最高层. 这篇文章的资料收集整理自各种微软公开的文档,通过比较 IIS5.IIS6.IIS7 这三代 IIS 对请求的处理过程, 让我们熟悉 ASP.NET的底层机制 并对请求(request)是怎么从Web服务器传送到ASP.NET运行时有所了解.通过对底层机制的了解,可以让我们对 ASP.net 有更深的理解. IIS 5 的 ASP.net 请求处理过程 对图的解释: IIS

  • 各版本IIS下ASP.net请求处理过程分析第1/3页

    绝大多数的人只熟悉高层的框架如: WebForms 和 WebServices --这些都在ASP.NET层次结构在最高层. 这篇文章的资料收集整理自各种微软公开的文档,通过比较 IIS5.IIS6.IIS7 这三代 IIS 对请求的处理过程, 让我们熟悉 ASP.NET的底层机制 并对请求(request)是怎么从Web服务器传送到ASP.NET运行时有所了解.通过对底层机制的了解,可以让我们对 ASP.net 有更深的理解. IIS 5 的 ASP.net 请求处理过程 对图的解释: IIS

  • IIS下ASP目录漏洞和IIS分号漏洞(;)的临时解决方法

    解决方法: 下载 银月服务器工具,使用工具->组件下载器下载ISAPI_Rewrite,解压出来. 把ISAPI_Rewrite中的ISAPI_Rewrite.dll添加为ISAPI,名字为ISAPI_Rewrite,这就是伪静态,做过的不用安装了 下载漏洞补丁包,即下图选择的项目,下载打开! 把ISAPI_Rewrite目录中的httpd.ini替换成补丁包中的httpd.ini. 或者保证ISAPI_Rewrite下面的httpd.ini有下图选择的两行规则也行!这样就能防止这两个IIS漏洞

  • IIS处理Asp.net请求和Asp.net页面生命周期说明

    首先我们要弄清楚两个非常重要的概念: 1, worker process(w3wp.exe). worker process管理所有的来自客户端的请求并给出响应.它是IIS下asp.net应用程序的核心. 2, application pool. 它是worker process的容器,IIS5及之前的IIS版本均没有application pool的概念.每一个application pool对应着一个worker process,在IIS Metabase中维护着Application Po

  • IIS处理Asp.net请求和Asp.net页面生命周期详细说明

    ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初始化.实例化控件.还原和维护状态.运行事件处理程序代码以及进行呈现.了解页生命周期非常重要,因为这样做您就能在生命周期的合适阶段编写代码,以达到预期效果.此外,如果您要开发自定义控件,就必须熟悉页生命周期,以便正确进行控件初始化,使用视图状态数据填充控件属性以及运行任何控件行为代码.(控件的生命周期基于页的生命周期,但是页引发的控件事件比单独的 ASP.NET 页中可用的事件多.) 一般来说,页要经

  • 详解IIS在ASP.NET Core下的两种部署模式

    目录 一.ASP.NET CORE Core Module 二. In-Process部署模式 三.Out-of-Process部署模式 四.<aspnetcore>配置 KestrelServer最大的优势体现在它的跨平台的能力,如果ASP.NET CORE应用只需要部署在Windows环境下,IIS也是不错的选择.ASP.NET CORE应用针对IIS具有两种部署模式,它们都依赖于一个IIS针对ASP.NET CORE Core的扩展模块.本文提供的示例演示已经同步到<ASP.NET

  • win10下ASP.NET Core部署环境搭建步骤

    随着ASP.NET Core 1.0 rtm的发布,网上有许多相关.net core 相关文章,今刚好有时间也在win10环境上搭建下 ASP.NET Core的部署环境,把过程记录下给大家. 1. 开发运行环境 1> Visual Studio 2015 Update 3* 2> .NET Core 1.0 for Visual Studio (包括asp.net core 模板,其中如果机器上没有.net core sdk会默认安装)地址https://go.microsoft.com/f

  • iis中ASP运行环境配置图解 IIS的安装和基本设置

    如果为了方便与简单的测试可以用简易的asp运行环境,可以到http://www.jb51.net/softs/28133.html下载,一般的网站是没问题的,如果比较复杂的就需要用iis了. 这里以win2003 iis6安装配置为主如果您的电脑没有安装iis那么需要安装,iis6.0的安装文件可以到http://www.jb51.net/softs/2176.html下载. 好,我们开始我们asp征程的第一步.任何动态语言都需要服务器的支持.这里牵涉到两个概念,一是服务器,还有一个就是与之对应

  • Win7旗舰版中的IIS配置asp.net的运行环境配置教程(图文教程+视频)

    以前弄过好多次,都没有成功,昨天晚上不知怎么地就成功了,借用我同学的一句话,这叫"灵光一闪",废话不多说了,这个成功是有图有视频有真相地哈! 这篇博文发表都三个月了,我自认为算是很详细了,可是还是很多人没有配置出来(天天有人在群里问我怎么配置),所以今天特意录成视频供大家参考.特意申明:这是配置asp.net运行坏境,不是asp,asp和asp.net是有区别的.asp.net如果还是配置不出可以问,asp就算了,我不懂asp哦!无法帮你解决. Win7旗舰版中的IIS配置asp.ne

随机推荐