有关服务器安全性的网站
发布时间:2006-5-29 9:08:52   收集提供:shendata
你的Windows 2000 /Internet Information Server (IIS) 5.0 Web 网站已经架设起来,准备开始运作时,却发现它被安全漏洞所困扰着。安全性方面的漏洞当然可以弥补,但那要看你如何去应对。如果怀有恶意的骇客还没有找到那些看不见的裂缝,这并不意味着你可以高枕无忧。他们可能只是还没有发现到你的网站而已。

那么,这套最先进的操作系统和网络服务器软件怎么可以如此的不完善呢?事实不是这样的。原来有很多安全缺口归因于 Microsoft 在 IIS 中所提供的功能。如果适切的注意到这些属性,它们将允许客制化(customization)的运用,在执行上更具弹性。但是当它们被忽略、误解或不正确的使用时,它们就会成为受攻击的弱点。

这些弱点所造成的影响可以是非常重大的。其中一个能使入侵者完全存取存放在网上的档案文件系统。另一个使入侵者能够看到 Active Server Pages(ASP)的原始码。还有一个允许入侵者在网络服务器上执行操作系统命令。

也许这看起来像是 IIS 的问题,这并不意味着其它的网络服务器能够提供比 IIS 更严谨的安全性。Robichaux & Associates 安全顾问暨 Microsoft Technet 的专栏作家 Paul Robichaux 就表示,Windows 2000 系列的网络服务器并不比其它服务器容易受到攻击,几乎所有的服务器都有各自的安全漏洞。

盛名所累成众矢之的

Carnegie-Mellon University 的CERT Coordination Center 是一个致力于提高网络安全、也是网上安全问题的极具指针性的一个网站。这个网站所报导的,是困扰着所有网络服务器和相关产品的安全漏洞议题。

讽刺的是,知名度可能是促使 IIS 5.0 比Apache 等其它服务器更容易暴露安全漏洞的原因。看起来,IIS 作为微软的网络旗舰产品,它的知名度足以吸引许多骇客的注意力。

所以坏消息就是,如果你只是简单地执行 IIS,被骇客盯上的机率会比较大。好消息是,只要充分了解 IIS 并采取适当的保护措施,便可以有效阻止骇客的入侵。但 Robichaux 警告说,修补安全漏洞不像按下一个标有「安全的网站」的按钮那么的简单,保护你的网站可是需要新的技巧和工具。

很多公司使用以下这两个步骤为它们基于 Windows 2000 的网络服务器来做组态:(1)安装 IIS 5.0、(2)不再理它。如果仅只于此的话,何不来个第三步骤:祈祷。

对于 IIS 5.0,Microsoft 针对安全性和可存取性/可用性(accessibility/usability)两方面做了很好的折衷,一般认为更倾向于后者。Data Return Corporation 的高级信息安全工程师 Alexandra Nosratinia 说,与诸如Apache 等服务器相比,IIS 的图形使用者接口(GUI)使管理和解决问题变得容易了,网站架设也非常快速。有了 IIS 的图形使用者接口,甚至可以不再需要专家的帮助。但要了解的是,容易用的系统并不代表是安全的系统。

如果选择 IIS 的预设组态(default configuration),你就是在自找麻烦。加强安全性虽然是你的责任,不过Microsoft 为此提供了充足的信息来帮助你。

从 Microsoft 的IIS 5.0 安全性检查清单开始吧!它收录了许多简单易懂的步骤,帮助保护 Windows 2000 系列的网站服务器免受绝大多数的攻击。在这个清单中能够找到的信息包括以下实用的主题:

在入侵者突破了防火墙的情况下配置 IPSec 策略。
通过限制来隔绝那些可以存取 Telnet 服务器的用户以达到保护服务器的目的。
为服务器的虚拟目录设置适当的存取控制。
进行日志记录,并在日志文件(log files)中设置适当的权限。
如果合适的话,为 IP 地址和 DNS 地址做权限。
更新网络服务器上的 Root CA 证书。
移除 IIS 中所有的示范应用程序。
移除所有不必要的 COM 组件,例如 File System Object。
从 IIS 4.0 升级以后,移除 IISADMPWD 虚拟目录。
移除无用的应用程序对应(script mappings),例如 IDC 或 HTR。
在 ASP 程序代码中检查窗体输入,以防止恶意输入。
在 IIS 5.0 中禁用 Parent Paths 选项。
禁用 Content-Location 文件的表头信息,以免泄露地址。
如果你熟悉为 IIS 4.0 提供的类似检查清单,你会注意到 IIS 5.0 的版本简短了许多。这是因为 Microsoft 把很多 IIS 4.0 清单中的配置(setting)移到了为 Windows 2000 准备的新的Hisecweb.inf 安全模板中。下载该模板并用在你的服务器上。另外,也有很多在IIS 4.0 清单中属于建议的配置,现在已成了 IIS 5.0 中预设的配置。

这份 IIS 5.0 清单并没有提及几个其它能够用来保护任何连接到网络上的计算机的措施。这些措施非常基本,却经常被忽略:

至少在连接到网络上的转接器(adapter)上取消「NetBIOS over TCP/IP」的设定。

不要在同一个 adapter 的 TCP/IP 上绑定客户端和服务器端服务。

在服务器上停止使用越多服务越好 。可考虑停用的服务包括: Alerter, ClipBook 服务器, DHCP 客户端, Directory Replicator, FTP Publishing Service, License Logging Service, Messenger, Netlogon, Network DDE, Network DDE DDM, Network Monitor, Remote Access Server, Remote Procedure Call Locator, Schedule Server, Simple Services, Spooler, TCP/IP NetBIOS Helper, 和 Telephone Service 等。

采用良好的使用者管理,坚持采用稳当的密码(strong password),去除诸如「Guest」等无用帐号,对任何人的权限都进行控制。

Nosratinia 提供了另一个较不常见的建议。首先,她建议删除「Administrator」帐号(或把它从所有组员窗体中移除),并用一个罕见的名字(odd name)建立一个新的管理员帐号。她还建议为所有网上内容使用加密文件系统(Encrypted File System,EFS),这么一来,即使入侵者可以令系统瘫痪,但是至少可以防止他们改变网站的内容。

有别于分配权限给使用者群组(group)的传统做法,Nosratinia 建议为单一用户(individual)帐号分配权限。她说为了进入系统,骇客必须「进入一个比他使用的帐号拥有更高特权级别的用户组。」使用单一用户的帐号(而非使用者群组)在这个过程中能达到遏止的效果。
修正程序、零件和工具

除了 IIS 5.0 安全清单,Microsoft 还提供很多其它有用的工具,以确保 IIS 安装的安全性。Microsoft 维护了一个已被发现的漏洞修正程序的列表。这个列表很全面,但却没有区分优先级,所以你可能会安装到一些你并不需要的修正程序。

Microsoft 也希望知道任何你所发现的安全漏洞。但该公司希望当你报告一个漏洞时,不要在 Microsoft 找到解决问题的修正程序之前对外做公开。

想要快些知道 Windows 2000 和 IIS 的其它漏洞,可以订阅 Microsoft Security Notification Service 的电子报。要订阅该电子报,发一封空信函(blank message)到microsoft_security-subscribe-request@announce.microsoft.com。更多详情可以在这里找到。这份电子报描述了在 Microsoft 或其它网站所发布的安全性问题。此外,Microsoft 在勾勒出如何解决某一问题的同时,它们也会提供快速处理该问题的相关应对措施。

有关服务器安全性的网站
以下的网站提供了有关服务器安全性的相关议题:


Carnegie Mellon CERT Coordination Center


Windows IT Security


SANS Institute Online


Beyond Security/SecuriTeam


SecurityFocus

除了一般的信息以外,Microsoft 现在还提供了一些新工具用于保护架设在 Windows 2000 的网站。为 IIS5.0 所提供的Hot Fix Checking Tool 工具能确保你的网站得到所有最新的安全修正程序。它可以在检测到缺少某个安全修正程序时显示错误讯息,或向事件日志(event log)中写入警告讯息。

另一个由 Microsoft 提供的便利工具是 Windows 2000 Internet Server Security Configuration Tool for Internet Information Server 5.0。透过使用单一的使用者接口,它简化了在安全组态中注册表设置(Registry settings)和安全策略(Security Policies)的复杂程序。它使用了类似精灵的使用者接口来了解你的需求,然后替服务器做组态。

最后一个安全性工具是IIS Security Planning Tool。这个工具提供适合你所建立的服务器类型的配置选项,帮助正确进行安全性配置。可用的 IIS 安全性工具的完整列表可以在Microsoft TechNet 的网站获得。

没有所谓的万灵丹

对网络服务器而言,在通向安全的路上,保护工作通常是必经之路;遭受到试图从最小的安全漏洞中钻进来的骇客的无情打击更是少不了的事。Windows 2000 和 Internet Information Server 5.0 也不例外,他们经受的考验决不会少。

但是通过这类精进而严密的审查还是有好处的。Microsoft 在过去一年中发布的安全性修正程序所带来的是更多的信任,而不是担心。因为随着每一个修正程序的发布,IIS 5.0 变得更好,成为更安全的服务器。随着产品的不断使用和批评,它们会越来越成熟,报告漏洞的数量也会因而减少。

不要以为在一个环境中使用良好的 Windows 2000/IIS 组态在另一个环境中也会有同样好的效果。对 Microsoft 所提供的资源做深入的探索,多加使用并从中学习。你懂得越多,你的服务器就越安全。在其它有用的资源中,我们推荐你阅读两本关于 IIS 服务器的书籍。Securing Windows NT/2000 Servers for the Internet(O'Reilly, 2000)提供了网络服务器管理员一个完整的安全性检查清单。另一本书更加倾向于网络开发人员的角度,也是我们极力推荐的,它是 Designing Secure Web-Based Applications for Microsoft Windows 2000 (Microsoft Press, 2000)。

保持警惕、保持清醒、保持机警,就能确保你的 IIS 网络服务器安全,免受攻击。

dalongleng 2006-02-14 01:40
Iframe Close: http://www.djasp.net/standard/read.asp?id=926

dalongleng 2006-02-14 01:46
很多朋友在用IIS6架网站的时候遇到不少问题,而这些问题有些在过去的IIS5里面就遇到过,有些是新出来的,俺忙活了一下午,做了很多次试验,结合以前的排错经验,做出了这个总结,希望能给大家帮上忙

问题1:未启用父路径

症状举例:
Server.MapPath() 错误 ''ASP 0175 : 80004005''
不允许的 Path 字符
/0709/dqyllhsub/news/OpenDatabase.asp,行 4
在 MapPath 的 Path 参数中不允许字符 ''..''。

原因分析:
许多Web页面里要用到诸如../格式的语句(即回到上一层的页面,也就是父路径),而IIS6.0出于安全考虑,这一选项默认是关闭的。

解决方法:
在IIS中属性->主目录->配置->选项中。把“启用父路径”前面打上勾。确认刷新。

问题2:ASP的Web扩展配置不当(同样适用于ASP.NET、CGI)

症状举例:
HTTP 错误 404 - 文件或目录未找到。

原因分析:
在IIS6.0中新增了web程序扩展这一选项,你可以在其中对ASP、ASP.NET、CGI、IDC等程序进行允许或禁止,默认情况下ASP等程序是禁止的。

解决方法:
在IIS中的Web服务扩展中选中Active Server Pages,点击“允许”。


身份认证配置不当
问题3:身份认证配置不当

症状举例:
HTTP 错误 401.2 - 未经授权:访问由于服务器配置被拒绝。

原因分析:IIS 支持以下几种 Web 身份验证方法:
匿名身份验证
IIS 创建 IUSR_计算机名称帐户(其中计算机名称是正在运行 IIS 的服务器的名称),用来在匿名用户请求 Web 内容时对他们进行身份验证。此帐户授予用户本地登录权限。你可以将匿名用户访问重置为使用任何有效的 Windows 帐户。
基本身份验证
使用基本身份验证可限制对 NTFS 格式 Web 服务器上的文件的访问。使用基本身份验证,用户必须输入凭据,而且访问是基于用户 ID 的。用户 ID 和密码都以明文形式在网络间进行发送。
Windows 集成身份验证
Windows 集成身份验证比基本身份验证安全,而且在用户具有 Windows 域帐户的内部网环境中能很好地发挥作用。在集成的 Windows 身份验证中,浏览器尝试使用当前用户在域登录过程中使用的凭据,如果尝试失败,就会提示该用户输入用户名和密码。如果你使用集成的 Windows 身份验证,则用户的密码将不传送到服务器。如果该用户作为域用户登录到本地计算机,则他在访问此域中的网络计算机时不必再次进行身份验证。
摘要身份验证
摘要身份验证克服了基本身份验证的许多缺点。在使用摘要身份验证时,密码不是以明文形式发送的。另外,你可以通过代理服务器使用摘要身份验证。摘要身份验证使用一种挑战/响应机制(集成 Windows 身份验证使用的机制),其中的密码是以加密形式发送的。
.NET Passport 身份验证
Microsoft .NET Passport 是一项用户身份验证服务,它允许单一签入安全性,可使用户在访问启用了 .NET Passport 的 Web 站点和服务时更加安全。启用了 .NET Passport 的站点会依靠 .NET Passport 中央服务器来对用户进行身份验证。但是,该中心服务器不会授权或拒绝特定用户访问各个启用了 .NET Passport 的站点 。

解决方法:
根据需要配置不同的身份认证(一般为匿名身份认证,这是大多数站点使用的认证方法)。认证选项在IIS的属性->安全性->身份验证和访问控制下配置。

问题4:IP限制配置不当

症状举例:
HTTP 错误 403.6 - 禁止访问:客户端的 IP 地址被拒绝。

原因分析:
IIS提供了IP限制的机制,你可以通过配置来限制某些IP不能访问站点,或者限制仅仅只有某些IP可以访问站点,而如果客户端在被你阻止的IP范围内,或者不在你允许的范围内,则会出现错误提示。

解决方法:
进入IIS的属性->安全性->IP地址和域名限制。如果要限制某些IP地址的访问,需要选择授权访问,点添加选择不允许的IP地址。反之则可以只允许某些IP地址的访问。

IUSR账号被禁用

问题5:IUSR账号被禁用

症状举例:
HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝。

原因分析:
由于用户匿名访问使用的账号是IUSR_机器名,因此如果此账号被禁用,将造成用户无法访问。

解决办法:
控制面板->管理工具->计算机管理->本地用户和组,将IUSR_机器名账号启用。

问题6:NTFS权限设置不当

症状举例:
HTTP 错误 401.3 - 未经授权:访问由于 ACL 对所请求资源的设置被拒绝。

原因分析:
Web客户端的用户隶属于user组,因此,如果该文件的NTFS权限不足(例如没有读权限),则会导致页面无法访问。

解决办法:
进入该文件夹的安全选项卡,配置user的权限,至少要给读权限。关于NTFS权限设置这里不再馈述。

IWAM账号不同步

问题7:IWAM账号不同步

症状举例:
HTTP 500 - 内部服务器错误

原因分析:
IWAM账号是安装IIS时系统自动建立的一个内置账号。IWAM账号建立后被Active Directory、IIS metabase数据库和COM+应用程序三方共同使用,账号密码被三方分别保存,并由操作系统负责这三方保存的IWAM密码的同步工作。系统对IWAM账号的密码同步工作有时会失效,导致IWAM账号所用密码不统一。

解决办法:
如果存在AD,选择开始->程序->管理工具->Active Directory用户和计算机。为IWAM账号设置密码。
运行c:\Inetpub\Adminscripts>adsutil SET w3svc/WAMUserPass +密码同步IIS metabase数据库密码
运行cscript c:\inetpub\adminscripts\synciwam.vbs -v 同步IWAM账号在COM+应用程序中的密码

问题8:MIME设置问题导致某些类型文件无法下载(以ISO为例)

症状举例:
HTTP 错误 404 - 文件或目录未找到。

原因分析:
IIS6.0取消了对某些MIME类型的支持,例如ISO,致使客户端下载出错。

解决方法:
在IIS中属性->HTTP头->MIME类型->新建。在随后的对话框中,扩展名填入.ISO,MIME类型是application。

另外,防火墙阻止,ODBC配置错误,Web服务器性能限制,线程限制等因素也是造成IIS服务器无法访问的可能原因,这里就不再一一馈述了。希望此帖能解决大家的大部分问题:)

dalongleng 2006-02-14 01:46
核心功能和服务
已对 iis 6.0 进行了重新设计以便利用基本 windows 内核 http.sys。这使其具有内置的响应和请求缓存和队列功能,并能够将应用程序进程请求直接路由到工作进程,从而改善可靠性和性能。

iis 6.0 引入了两种用于配置应用程序环境的操作模式:工作进程隔离模式和 iis 5.0 隔离模式。在安装 iis 6.0 时默认的隔离模式取决于您执行的是全新安装还是升级。

在全新安装 iis 6.0 之后,iis 以工作进程隔离模式运行。
在从较低版本的 iis 6.0 升级之后,隔离模式与以前安装的 iis 6.0 版本所配置的相同。
在从 iis 5.0 或 iis 4.0 升级之后,在默认情况下,iis 6.0 以 iis 5.0 隔离模式运行,这样可保持与现有应用程序的兼容性。
有关从一种隔离模式切换到另一种隔离模式的信息,请参阅配置隔离模式。

iis 5.0 iis 5.1 iis 6.0
平台 windows 2000 windows xp professional windows server 2003 家族
体系结构 32 位 32 位和 64 位 32 位和 64 位
应用程序进程模型 tcp/ip 内核
dllhost.exe(处于中等或高应用程序隔离模式下的多个 dll 主机)
tcp/ip 内核
dllhost.exe(处于中等或高应用程序隔离模式下的多个 dll 主机)
http.sys 内核
当 iis 以 iis 5.0 隔离模式运行时:inetinfo.exe(对于进程内应用程序)或 dllhost.exe(对于进程外应用程序)
当 iis 以工作进程隔离模式运行时:w3wp.exe(多工作进程)

      iis 5.0 iis 5.1 iis 6.0
平台 windows 2000 windows xp professional windows server 2003 家族
体系结构 32 位 32 位和 64 位 32 位和 64 位
应用程序进程模型 tcp/ip 内核
dllhost.exe(处于中等或高应用程序隔离模式下的多个 dll 主机)
tcp/ip 内核
dllhost.exe(处于中等或高应用程序隔离模式下的多个 dll 主机)
http.sys 内核
当 iis 以 iis 5.0 隔离模式运行时:inetinfo.exe(对于进程内应用程序)或 dllhost.exe(对于进程外应用程序)
当 iis 以工作进程隔离模式运行时:w3wp.exe(多工作进程)

配置数据库配置 二进制 二进制 xml

安全性 windows 身份验证
ssl
kerberos
windows 身份验证
ssl
kerberos
安全向导
windows 身份验证
ssl
kerberos
安全向导
passport 支持

远程管理
htmla 无 htmla
终端服务
远程管理工具 (html)
终端服务

群集支持
iis 群集 windows 支持 windows 支持

www 服务
windows 9x 上的个人 web 管理器
windows 2000 上的 iis
(可选)windows xp professional 上的 iis windows




iis 5.0 隔离模式
iis 5.0 隔离模式按照与 iis 5.0 中的进程管理相似的方式管理应用程序进程:所有的进程内应用程序都在 inetinfo.exe 内运行,进程外应用程序在单独的 dll 宿主中运行。一些现有应用程序可能无法并发运行或将会话状态与应用程序分开存储。因此,在 iis 5.0 隔离模式中运行进程可以确保与大多数现有应用程序的兼容性。下图显示如何在 iis 5.0 隔离模式中处理应用程序进程。


配置数据库配置
iis 6.0 的配置数据库以 xml 文件形式存储,而不是以早期版本中的二进制格式存储。位置仍在原处,但是操作方式(更新、回滚、还原和扩展)已发生了变化。有两个重要文件,并非一个:metabase.xml 和 mbschema.xml。

有关 iis 配置数据库的详细信息,请参阅关于配置数据库。

管理
在 iis 4.0 中,应用程序既可以在与 internet 服务相同的进程中运行,也可以在单独的进程中运行。在 iis 5.0 和 5.1 中,应用程序现在可以分为若干汇集的进程以增强性能并提高可伸缩性。 详细信息,请参阅关于应用程序。在 iis 6.0 工作进程隔离模式中,可将应用程序组合到任意数量的应用程序池中。
“应用程序映射”属性页包含一个超文本传输协议 (http) 动作列表,它们可由映射到特定文件类型的应用程序进行处理。该动作列表与 iis 4.0 有一处不同。在 iis 4.0 中,列表中包含“已排除”或未被处理的动作。这个改变是为了适应新的 http 动作,以便将其添加到协议中。 有关应用程序映射的详细信息,请参阅设置应用程序映射。
群集不是 iis 6.0 的功能(不支持 iissynche.exe)。群集是 windows server 2003 家族的功能。有关 windows 群集 (mscs) 的信息,请参阅 windows server 2003 家族的帮助。
与 iis 4.0 相比,iis 5.0 中自定义错误文件的位置已经改变。 详细信息,请参阅启用详细的自定义错误消息。
已经添加了新的自定义错误文件,以便报告更详细的错误信息以及与新功能有关的错误。 有关可用的自定义错误消息的完整列表,请参阅关于自定义错误消息。
基于 web 的 internet 服务管理器 (html) 已经由 web 工具应用。要使用 internet 服务管理器 (html) 远程管理 iis, 请参阅如何远程管理服务器。
以编程方式管理
在早期版本的 iis 中,可以从编译的 c++ 应用程序使用管理基本对象 (abo) 或者从 c++ 或脚本文件使用 active directory 服务界面 (adsi) 以编程方式管理 iis。iis 6.0 包括了 windows 管理规范 (wmi) 提供程序,wmi 这一技术允许管理员以编程方式控制所有服务和应用程序。详细信息,请参阅使用 iis wmi 提供程序。有关新的 adsi 方法的信息,请参阅 iis 6.0 中的配置数据库更改。

active server pages
从 iis 6.0 开始,microsoft active server pages (asp) 可以与 microsoft asp.net 一起使用。有关配置 iis 以运行 asp.net 应用程序的信息,请参阅 asp.net。有关 iis 6.0 中 asp 功能更改的信息,请参阅 asp 中的重要更改。

asp 挂起检测
当 iis 网站繁忙时,可能会出现这种情况:已经产生了最大数量的 asp 线程,而一些 asp 线程却挂起,这会导致性能降低 。iis 6.0 能够通过回收作为 asp isapi 扩展 (asp.dll) 的特定实例宿主的工作进程来解决线程挂起问题。当 asp 线程在 iis 6.0 中挂起时,asp.dll 调用 isapi 服务器支持函数 hse_req_report_unhealthy,www 服务回收作为 asp.dll 宿主的工作进程,并在事件日志中创建一个项目。

有关 isapi 服务器支持函数的详细信息,请参阅 msdn® online 上 isapi 扩展参考中的 serversupportfunction。

安全性
iis 6.0 中的一个最重要的变动涉及 web 服务器安全性。为了更好地预防恶意用户和攻击者的攻击,在默认情况下,没有将 iis 安装在 microsoft windows server 2003 家族的成员上。

要点 为了更好地预防恶意用户和攻击者的攻击,没有将 iis 默认安装到 microsoft® windows® server 2003 家族的成员上。而且,当您最初安装 iis 时,该服务在高度安全和“锁定”的模式下安装。在默认情况下,iis 只为静态内容提供服务 - 即,asp、asp.net、服务器端包含、webdav 发布和 frontpage® server extensions 等功能只有在启用时才工作。如果安装 iis 之后未启用该功能,则 iis 返回一个 404 错误。您可以为动态内容提供服务,并通过 iis 管理器中的 web 服务扩展节点启用这些功能。同样,如果应用程序扩展未在 iis 中进行映射,则 iis 返回一个 404 错误。要映射扩展,请参阅设置应用程序映射。有关如何排解 404 错误(包括 404.2 和 404.3)、与 iis 6.0 的新安装相关的问题或从低版本的 iis 进行升级的详细信息,请参阅疑难解答。

通过 web 服务器证书向导和 ctl 向导,您可以同步 web 和 ntfs 的安全设置、获得并安装服务器证书以及创建和修改证书信任列表。还可以选择一个加密服务提供程序 (csp) 以使用证书加密数据。 详细信息,请参阅使用证书向导。

iis 6.0 中的其他安全性变动包括下列内容:

在升级版本上禁用:除非满足下列条件之一,否则在 windows server 2003 家族的升级版本上禁用万维网发布服务(www 服务):
在开始升级过程之前,您已在 windows 2000 server 上运行了 iis 锁定向导。iis 锁定向导通过禁用不必要的功能来减少攻击面,并且它允许您确定为站点启用哪些功能。iis lockdown tool 中提供了 iis 锁定向导。
要点 如果使用 www 服务,则强烈建议您在升级到 windows server 2003 家族中的产品之前,在 windows 2000 server 上运行 iis 锁定向导。iis 锁定向导通过禁用或删除 windows 2000 server 安装中不需要的功能来保护计算机的安全。否则,升级后计算机上仍保留这些功能,这会使您的服务器易受攻击。

注册表项 retainw3svcstatus 已添加到注册表中 hkey_local_machine\system\currentcontrolset\services\w3svc 的下面。在 retainw3svcstatus 下,您可以添加任何值,然后给它赋予一个 dword 值。例如,您可以创建注册表项 hkey_local_machine\system\currentcontrolset\services\w3svc\retainw3svcstatus\do_not_disable,并且 dword 值为 1。
对于无人参与的安装,“disablewebserviceonupgrade = false”项存在于无人参与的安装脚本中。
通过组策略禁用 iis:通过使用 windows server 2003 家族成员,域管理员可以禁止用户在其计算机上安装 iis。
以具有低级访问权限的帐户运行:iis 工作进程在访问权限极少的用户上下文中运行。这大大减少了潜在攻击的影响。
提高 asp 的安全性:所有的 asp 内置功能总是以具有极少访问权限的帐户 iusr_computername 运行。
运行可执行文件的限制:为了运行系统文件夹中的大多数可执行文件(如 cmd.exe),您必须是 administrators 组、localsystem、interactive 或 service 帐户的成员。该限制限制了对 administrators 的远程访问,因此匿名用户无法运行可执行文件。
修补程序管理:对于修补程序管理,管理员可在不中断服务的情况下安装最新的安全修补程序。
已知的扩展:iis 只为对具有已知文件扩展名的文件的请求提供服务。如果请求内容的文件扩展名未映射到已知的扩展,则服务器拒绝请求。
内容的写保护:在默认情况下,拒绝匿名用户(以 iusr_computername 帐户运行)对 web 内容进行写入访问。
超时和限制:在 iis 6.0 中,默认设置是安全而主动的,这样可最大限度地减少因以前太宽松的超时和限制而造成的攻击。
上载数据限制:管理员可以限制能上载到服务器的数据。
缓冲区溢出保护:工作进程会检测缓冲区溢出,并在检测到时退出程序。
文件验证:iis 在将请求发送到请求处理程序(isapi 扩展)之前会验证请求的内容是否存在。
索引资源:该权限现在会在默认情况下启用。
脚本资源访问:该权限允许访问 asp 页脚本和其他脚本的“源代码”,它是新增功能,且在默认情况下被禁用。它可在选择了“读取”或“写入”权限时可用。
子验证:在新安装的 iis 6.0 中,在默认情况下不再启用。有关详细信息,请参阅 匿名身份验证中的“使用子验证”部分。
unc 身份验证:在此版本的 iis 中,unc 身份验证方法检查是否有用户凭据。详细信息,请参阅 unc 身份验证。
新策略:“禁止安装 iis”策略已经添加到 windows server 2003 产品家族中。该策略允许域管理员控制可以在域中哪些计算机上安装 iis。详细信息, 请参阅 windows 帮助中的组策略。
fortezza:已取消了对该功能的支持。
性能
为了限制分配给 asp 页的内存量,iis 已经将 aspscriptfilecachesize 的默认值设置为 250 个 asp 页,并将 aspscriptenginecachemax 的默认值设置为 125 个脚本引擎。在具有一组大量经常请求的 asp 页的站点上,可以将 aspscriptfilecachesize 设置得更高一些。因为 asp 页的编译比从缓存中检索页要慢很多,所以这会改善性能。在只具有少量经常请求的 asp 页的站点上,可通过将该数字设置得小一些来节省内存。

iis 工具组件
windows nt server 的协作数据对象 (cdonts):cdonts 已从 windows server 2003 家族中删除。如果 web 应用程序使用 cdonts,则可以将它们转换为 microsoft 协作数据对象 (cdo)。cdonts 中的大多数方法在 cdo 中都有相匹配的方法,但是名称可能不同。有关平台软件开发工具包 (psdk) 中 cdo 的参考资料,请参阅 msdn online 上的 overview of cdo。
未安装 iis 工具组件:ad rotator、browser capabilities、content linker、content rotator、counters、logging utility、my info、page counter、status 和工具不随 iis 6.0 一起安装。但是,如果您的 web 服务器是从低版本的 iis 升级的,则这些工具组件不会被删除。您可以从 iis 6.0 资源工具包中获取工具组件 dll 文件的副本。
64 位 windows server 2003 家族上的 iis
在 64 位 windows server 2003 家族的操作系统上,iis 作为 64 位应用程序运行。这意味着不能从 64 位 windows server 2003 家族的操作系统上的 iis 调用 32 位应用程序。例如,jet 数据库引擎将不能转换为 64 位应用程序,因此,不能使用 activex® 数据对象 (ado) 从 asp 页打开 microsoft access 数据库。但是,仍可以使用 ado 访问其他驱动程序,如 sql 和 exchange。

dalongleng 2006-02-14 01:49
activex 数据对象 (ado) 是一种既易于使用又可扩充的技术,用来将数据库访问添加到您的 web 页可以使用 ado 编写简洁和可升级的脚本以连接到与 ole db 兼容的数据源,如数据库、电子表格、顺序数据文件或电子邮件目录。ole db 是一个系统级的编程接口,它提供一套标准的 com 接口,用来展示数据库管理系统的功能。使用 ado 的对象模型,您可以轻松地(使用 vbscript 或 jscript 等脚本语言)访问这些接口并将数据库功能添加到您的 web 应用程序中。另外,您还可以使用 ado 访问与开放式数据库互连 (odbc) 兼容的数据库。
如果您是一位对数据库互连知识有一定了解的脚本编写者,您将会发现 ado 的命令语法很简单,而且很容易使用。如果您是一位经验丰富的开发人员,您将会非常欣赏 ado 提供的这种可升级的对各种数据源的高性能访问。
关于 ado 的详细信息,请访问 microsoft 通用数据访问 (uda) web 站点 http://www.microsoft.com/data/
创建连接字符串

创建 web 应用程序的第一步是给 ado 提供一种定位并识别数据源的方法。这是通过“连接字符串”来完成的,连接字符串是一系列用分号分隔的参数,用来定义诸如数据源提供者和数据源位置等参数。ado 使用连接字符串来识别 ole db “提供者”并将提供者指向数据源。提供者是一个组件,用来描述数据源并以行集合的形式将信息展示给应用程序。
下表列出了几个通用数据源的 ole db 连接字符串:数据源 ole db 连接字符串
microsoft access provider=microsoft.jet.oledb.4.0;source=指向 .mdb 文件的物理路径
microsoft sql server provider=sqloledb.1;source=指向服务器上数据库的路径
oracle provider=msdaora.1;source=指向服务器上数据库的路径
microsoft indexing service provider=msidxs.1;source=指向文件的路径

为了提供向后兼容,odbc 的 ole db 提供者支持 odbc 连接字符串语法。下表列出了通常使用的 odbc 连接字符串: 数据源驱动程序 odbc 连接字符串
microsoft access driver={microsoft access driver (*.mdb)};dbq=指向 .mdb 文件的物理路径
sql serverr driver={sql server};server=指向服务器的路径
oracle driver={microsoft odbc for oracle};server=指向服务器的路径
microsoft excel driver={microsoft excel driver (*.xls)};dbq=指向 .xls 文件的物理路径; driverid =278
microsoft excel 97 driver={microsoft excel driver (*.xls)};dbq=指向 .xls 文件的物理路径;driverid=790
paradox driver={microsoft paradox driver (*.db)};dbq=指向 .db 文件的物理路径; driverid=26
文本 driver={microsoft text driver (*.txt;*.csv)}; defaultdir=指向 .txt 文件的物理路径
microsoft visual foxpro®(带有一个数据库容器) driver={microsoft visual foxpro driver};sourcetype=dbc;sourcedb=指向 .dbc 文件的物理路径
microsoft visual foxpro(不带数据库容器) driver={microsoft visual foxpro driver};sourcetype=dbf;sourcedb=指向 .dbf 文件的物理路径


注意 (使用 unc 路径引用位于远程计算机上的数据源的)连接字符串可能造成潜在的安全问题。要禁止对您的数据源进行未授权访问,可为需要访问数据的计算机创建 windows 帐号,然后对数据源应用适当的 ntfs 权限。详细信息,请参阅使用 ntfs 保护文件。
设计 web 数据应用程序时应考虑的高级问题

由于性能和可靠性的原因,我们强烈推荐,在配置数据驱动 web 应用程序(需要能满足大约 10 个以上并发用户同时进行高要求的访问)时,使用客户端服务器数据库引擎。虽然 ado 适用于与 ole db 兼容的任何数据源,但经过广泛的测试,主要设计为与客户端服务器数据库(如 microsoft sql server 或 oracle)一起工作。
asp 支持共享文件数据库(microsoft access 或 microsoft foxpro)作为有效的数据源。虽然在 asp 文档中有些示例使用了“共享文件”数据库,但我们还是建议这些类型的数据库引擎只用于开发目的或有限的开发方案中。共享文件数据库可能不如客户端服务器数据库更适合于高要求和高质量的 web 应用程序。
如果正在开发 asp 数据库应用程序,并且该程序将连接到远程 sql server 数据库,您还应该注意以下几点:
选择 sql server 连接方案 要访问远程 sql server 数据库,可以选择 tcp/ip 套接字方法或已命名管道方法。使用已命名管道,必须在建立连接之前由 windows 对数据库客户加以验证,以防止运行已命名管道的远程计算机拒绝那些在该计算机上具有适当 sql server 访问证书、但没有 windows 用户帐号的用户的访问。作为另一个选择,使用 tcp/ip 套接字的连接将直接连到数据库服务器,而不通过中间计算机进行连接。如果通过中间计算机,则与使用已命名管道类似。而且由于使用 tcp/ip 套接字的连接会直接连到数据库服务器,所以用户可以通过 sql server 验证而不是 windows 验证来获得访问。
odbc 80004005 错误 如果访问 sql server 的连接方案没有正确设置,则正在查看数据库应用程序的用户可能会收到 odbc 80004005 错误的消息。要纠正这种情况,可使用本地的已命名管道连接代替网络的已命名管道连接,但 sql server 与 iis 需在同一计算机上运行。windows 2000 安全规则不会受到影响,因为此管道是本地连接而不是网络连接,它可以由匿名用户帐号来模拟。同样,在 sql server 连接字符串(在 global.asa 文件或网页级脚本中)中,将参数 server=server name 更改为 server=(local) 。关键字 (local) 是由 sql server odbc 驱动程序识别的特殊参数。如果该解决方案无法工作,那么请在 iis 和 sql server 之间尝试使用非验证协议,如 tcp/ip 套接字。当 sql server 在本地或远程计算机上运行时,该协议将能够工作。
注意 为了在连接到远程数据库时提高性能,请使用 tcp/ip 套接字。
sql server 安全 如果使用 sql server 的“集成”或“混合”安全特性,并且 sql server 数据库驻留在远程服务器上,那么您将无法使用集成的 windows 验证。特别地,您无法将集成的 windows 验证证书发送给远程计算机。这意味着您不得不使用基本验证,该验证需要用户提供用户名和密码信息。

有关这些问题的详细信息,请访问位于 http://www.microsoft.com/china/support/ 的 microsoft 产品支持服务 web 站点。
连接到数据源

ado 提供了“connection”对象,用于建立与管理应用程序和 ole db 兼容数据源或 odbc 兼容数据库之间的连接。“connection”对象的属性和方法可以用来打开和关闭数据库连接,并发布对更新信息的查询。
要建立数据库连接,首先必须创建“connection”对象实例。例如,下面的脚本创建“connection”对象实例,接着打开一个连接:
<%'创建 connection 对象set cnn = server.createobject("adodb.connection")'使用 ole db 连接字符串打开连接cnn.open "provider=microsoft.jet.oledb.4.0;data source=c:\marketdata\projectedsales.mdb"%>

注意 连接字符串在等号 (=) 的左右并不包含空格。
在这种情况下,“connection”对象的“open”方法将引用连接字符串。
使用 connection 对象执行 sql 查询

使用“connection”对象的“execute”方法可以将命令发布到数据源,如结构化查询语言 (sql) 查询。(sql 是与数据库进行通信的工业标准语言,定义了用来检索和更新信息的命令。)“execute”方法可以接收参数,用来指定命令(或查询)、受影响的数据记录数和所使用命令的类型。
下面脚本使用“execute”方法以 sql “insert”命令的形式发布查询,该命令用来将数据插入指定的数据库表中。在这种情况下,脚本块将名字“jose lugo”插入到名为“customers”的数据库表中。
<%'定义 ole db 连接字符串。strconnectionstring = "provider=microsoft.jet.oledb.4.0;data source=c:\data\employees.mdb"'例示 connection 对象并打开数据库连接。set cnn = server.createobject("adodb.connection")cnn.open strconnectionstring'定义 sql select 语句。strsql = "insert into customers (firstname, lastname) values ('jose','lugo')"'使用 execute 方法将 sql 查询发布到数据库。cnn.execute strsql,,adcmdtext + adexecutenorecords%>

注意,在用来执行查询的语句中指定了两个参数:adcmdtext 和 adexecutenorecords。可选参数 adcmdtext 指定命令类型,说明提供者必须将此查询语句(这里是 sql 查询语句)评估为命令的文本定义。adexecutenorecords 参数指示 ado 在没有结果返回到应用程序时不要创建数据记录集。此参数只用于定义为文本定义(如 sql 查询)的命令类型,或已存储的数据库过程。虽然 adcmdtext 和 adexecutenorecords 是可选参数,但在使用“execute”方法增强数据应用程序性能时应指定这两个参数。
要点 ado 参数,如 adcmdtext,需要在脚本中先定义然后再使用。一个方便的定义参数的方法是使用“组件类型库”,它是包含所有 ado 参数定义的文件。要实施组件类型库,首先应声明它。将下面的 <metadata> 标记添加到 .asp 文件或 global.asa 文件中以声明 ado 类型库:
<!--metadata name="microsoft activex data objects 2.5 library" type="typelib" uuid="{00000205-0000-0010-8000-00aa006d2ea4}"-->

有关实施组件类型库的详细信息,请参阅使用变量和常量主题中的使用常量部分。
除了 sql 的 insert 命令外,还可以使用 sql 的 update 和 delete 命令来更改和删除数据库信息。
使用 sql 的 update 命令可以更改数据库表中各个项目的值。下面的脚本使用 update 命令将 customers 表中所有在 lastname 字段中包含姓氏 smith 的 firstname 字段更改为 jeff。
<%set cnn = server.createobject("adodb.connection")cnn.open "provider=microsoft.jet.oledb.4.0;data source=c:\data\employees.mdb"cnn.execute "update customers set firstname = 'jeff' where lastname = 'smith' ",,adcmdtext + adexecutenorecords%>

要删除数据库表中指定的记录,可使用 sql 的 delete 命令。下面的脚本将删除 customers 表中所有姓氏为 smith 的行:
<%set cnn = server.createobject("adodb.connection")cnn.open "provider=microsoft.jet.oledb.4.0;data source=c:\data\employees.mdb"cnn.execute "delete from customers where lastname = 'smith'",,adcmdtext + adexecutenorecords%>

注意 在使用 sql delete 命令时务必小心谨慎。不带 where 子句的 delete 命令将删除表中的所有行。确保包括 sql where 子句,以便明确指定要删除的行。
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50