<<<返回

安全维护 IIS asp 站点的高级技巧
一:前言 （仅以此文感谢好友bigeagle。不是他，我可能不用这么担心win2000安全问题的。呵呵！） 人说，一朝被蛇咬，十年怕.....。就是这样。2000年初，当我终于摆脱winnt 4.0 server那可怕的补 丁之旅，迈向win2000 server时。我终于可以比较放心我的服务器了。但随着sp1的补丁出现。我知道， 与微软的补丁因缘又开始轮回了。但还好。win2000自动化的管理还是让我放心好多，而以前管理winnt后
的失眠症状也逐渐消失了。偶尔还能见到我的“梦”老弟。但这一切都伴随者同bigeagle的一次知心交谈
中付之东流了。一次。bigeagle发来qq。给我看了一段代码。我一看就知道这不是bigeagle写的代码，那
么烂，不过有点熟悉。再一看。啊？！这不是我的数据库连接字符串吗！！GOD。顿时觉得有一种不祥的
预兆。不过还好，这个只是个access的，我还用了一些手段防止他被下载。但这足以让我长时间的失眠又
来了。（再次说明，bigeagle不是蛇，他是鹰）
二：安装过程中的IIS 与 asp安全防护。（这里只考虑是web服务器，而不是本地机子上的web开发平台。
）
接下来的几天有是几个难熬的日子。我开始重新部署win2000 web服务器的安全策略。
找到asp代码被泄漏的原因，原来。我的补丁每次打得都比较及时的。但一次因为卸载FTP时，重装了
IIS，而这之后，我并没有再打补丁而导致最新的漏洞web解析出错。（就是那个较新的漏洞 Translate
:f 用这个加上一些工具就可以看到asp的代码了。）
首先，开始重装IIS。
这次安装的策略就是安全，够用。去掉一些多余的东西。
一：FTP不要安装了，功能不好，还容易出错，并且漏洞很大。Ftp缺省传输密码的过程可是明文传送
，很容易被人截获。（可以考虑用第三方工具。）
二：一切实例、文档也不要安装了。这是在web服务器上，最好不要这些例子，事实证明可以从这些例
子站点突破IIS的防线的。
三：安装时选择站点目录，建议不要用缺省目录c:\inetpub，最好安装道不是系统盘的盘上。如：
d:\IISWEB，可以考虑自建目录。这样即使IIS被突破，也能尽可能的保护好系统文件了。
四：不要安装html的远程管理。html的远程管理在winnt 4.0还能用的上，但漏洞比较大，而且比较危
险，端口号虽然是随机的，但很容易被人扫描道，从而留下隐患。事实上，我们可以通过另一台服务器上
的IIS来管理他。这样比较安全。
五：多余的服务也不要安了，如NNtp，如果不做新闻组。就不要安了。smtp，如果有更好的邮件服务
，也不要装他了。
六：索引服务器。这个索引真的是很有用，但我没有用过他。否则，你可以用他建立个整个站点的文
件搜索的，但现在好像大多数的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 然后每一个文件用下面的办法打开连接。
如：<!-- #include file="include\*.inc" -->
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)
这样你就可以用上面的方法来达到安全目的了。
二：启用日志监测。
这是亡羊补牢的好工具，至少你可以用它来监测谁通过webl干了什么，当然，你还要保护该日志的权限只
能是被系统管理员。和超级管理所控制。这样避免某些人的干了某些事而不留痕迹。为了留好现场而又不
影响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的。如果你要用道数据库。用道远程管理，用道远程连接数据库。那还要分别注
意。正如我说的。没有绝对的安全。而这也才是安全的需要。关于安全的话题，没有结束，只有待续。。