注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue 发布时间:2018/1/21 23:21:52
一个Web应用程序通常有2大部分组成:一是Web应用程序执行文件,即代码文件;二是程序需要用到的数据文件和文件夹。代码文件的安全性决定程序是否有漏洞,而程序需要用到的数据文件和文件夹则是Web应用程序与服务器系统的“接口”,它事关服务器系统的整体安全。如果程序代码本身没有问题,而文件系统本身的安全策略或设置有问题,就可能导致一着不慎满盘皆输。
从本节开始,将花2个章节分别讲解Windows、Linux操作系统的文件安全策略和设置。本章节讨论Windows文件系统的安全。
一、概述
Web应用程序执行文件(代码文件)之所以容易遭到攻击,是因为它们包含了对攻击者有利的信息,如服务器脚本文件(.asp、.aspx)包含站点的表征源代码,有的还可能包含了数据库的连接字符串、直接可以授权的用户名和密码,以及其他一些透露应用程序和操作系统的配置信息。攻击者可以利用多种途径发动对这些代码文件的攻击:
- 低版本的IIS和没有打补丁的操作系统。低版本的IIS可能包含致命漏洞,这些漏洞都已经被公开了,成为黑客的常规资源,如早期的IIS中,在网址后面加上“::$DATA”(不包含引号部分),即可访问ASP文件的源代码。而没有打补丁的操作系统犹如在裸奔,一旦被攻击者侦测到,被攻击是不可避免的。
- 通过某些特殊方式访问文件。例如,利用操作系统FTP软件和WebDAV(分布式创作和版本控制程序)的漏洞,攻击者就可以获取到服务器上的源码文件。
- 没有加保护的配置文件。某些文件类型,如.inc如果没有加以保护,容易被攻击者控制。
要保护代码文件的安全,根本措施是授权访问制度,尽量赋予用户以最低的权限。具体来说,可以通过下面的措施:
- 文件和文件夹ACL。ACL,即Access Control List(访问控制列表),可以用来对操作系统用户进行分级授权。IIS在响应客户端时采取ACL的设置,利用Windows操作系统的特性,可以保护文件系统安全。
- IIS配置的安全性。IIS里,包含着文件和文件夹的权限配置,面向所有客户端。
- Web.config等配置文件。身份验证和授权可以通过Machine.config、Web.config等配置文件来配置,以保护Web应用程序的安全。
二、Windows访问控制
Windows操作系统一大安全特点,就是可以通过访问控制,来控制和监视不同用户对系统文件资源的使用。需要注意的是,这些访问控制只对于NTFS文件系统格式的磁盘有效,老式的FAT16和FAT32无法实现访问控制。想要查看一个磁盘的文件系统格式,只需要查看磁盘的属性即可。现代操作系统一般都是NTFS。
1、安全描述符
系统需要保护的对象,通常包括下面的资源:文件和文件夹、进程和线程、注册表、Windows服务、本地或远程打印机、网络共享、目录服务对象、命名管道、进程间同步对象(事件、互斥信息、信号量和延迟等待)。它们都具有Windows安全描述符,也被称为安全对象。
所有的安全对象都有一个安全描述符,它包括下面这些分项:一个所有者的SID、一个主要组SID、0或1个DACL、0或1个SACL。下面分别介绍:
- 安全标识符(SID):即Security Identifier,是识别受信者身份的唯一标识符,受信者可以是一个用户账户、一个组账户或一个登陆会话。每个用户都有Windows域控制器发出的SID。用户每次登陆域时,都会创建一个登陆会话,每个会话包含一个访问标记,在登录时会为访问标记分配用户的SID。所有者SID是一个用户或组,它们可以读和控制安全描述符中的DACL;主要组SID是保持可移植UNIX操作系统接口(POSIX)兼容性的必要条件,但它对于Windows安全没有帮助。
- 访问控制项(ACE):在介绍ACL(DACL+SACL)之前,我们了解下ACE概念,ACE即Access Contorl Entry,访问控制项,ACL是ACE的有序列表集合。ACE由SID、ACE的访问权限、ACE类型和继承标志组成。访问权限是一个位标志,它控制在安全对象上执行的一组特殊的操作,每种安全对象的类型都有特定的访问权限。例如,普通访问权限是GENERIC_READ,注册表项的特定访问权限是KEY_SET_VALUE。ACE类型有3种:拒绝访问、允许访问、系统审核(受信者访问对象时产生审核记录)。子对象可以从父对象继承ACE,例如子文件夹可以从父文件夹继承ACE。继承标志决定是否继承ACE及如何继承。继承标志控制着ACE传播给子对象的方式,可以通过配置ACE继承性来实现ACE的传播,但只能从父对象传给子对象、父容器传给子容器、既传给子对象又传给子容器,或者根本不传递。
- 访问控制列表(DACL、SACL):Windows 2000 以及以上版本都是通过ACL来保护文件和系统安全的。Windows操作系统使用两种ACL:一种是DACL,即任意访问控制列表(Discretionary Access Control List),用于为用户或用户组指定访问权;另一种是SACL,即系统访问控制列表(System Access Control List),用于审核访问者的身份、决定特定访问类型何时产生审核信息。访问控制项(ACE)在ACL中找到特定的用户或用户组,并为该用户或用户组指定访问权限,单个的ACE即可允许或禁止访问。
2、设置文件ACL
要查看一个文件或文件夹的ACL,可以通过“鼠标右键->属性”的方式查看(在“安全”选项卡里)。属性里显示基本和高级的ACL,基本的ACL只显示DACL。下面,我们根据操作的顺序,来介绍ACL的设置。
“安全”选项卡。“安全”选项卡的顶部显示DACL,通过“添加”和“删除”按钮可以操作单个ACE。选项卡底部显示当前选中的ACE的访问权限简表:

“高级安全设置”对话框。单击上图中,安全选项卡底部的“高级”按钮,就可以打开“高级安全设置”对话框。“高级安全设置”对话框显示安全描述符的详细信息:

“权限”选项卡。
“权限”选项卡显示了对象完整的DACL,可以用于添加、删除、编辑单个ACE。位于底部的“允许父项的继承权限传播到该对象和所有子对象”复选框,顾名思义,控制着对象是否继承父对象的DACL。通过该选项卡,我们可以看到所有ACE的详细权限,这些权限的含义见下面“有效权限”选项卡的介绍。
“审核”选项卡。“审核”选项卡显示对象的SACL,并允许对ACE进行添加、删除、编辑。位于底部的“允许父项的继承审核项目传播到该对象和所有子对象”复选框,控制着该对象是否继承其父对象的SACL。个别ACE的属性对话框允许设置审核标志和继承标志。

“所有者”选项卡。“所有者”选项卡显示除了安全对象所有者的SID。可以使用“所有者”选项卡更改对象的所有者(如果有权限修改的话)。

“有效权限”选项卡。在“有效权限”选项卡里,可以点击“选择”按钮,查看一个用户或用户组所拥有的权限。这些权限在之前的“权限”选项卡中已经大致列出,但没有完整列出,只有通过“编辑”按钮才能查看和修改。这里列出的是完整的权限。这些详细权限项的含义如下:
访问权限 | 描 述 |
---|---|
遍历文件夹/执行文件 | 允许或拒绝执行文件;对于文件夹,允许或拒绝浏览文件夹的层次结构 |
列出文件夹/读取数据 | 允许或拒绝读取文件中的数据;对于文件夹,允许或拒绝列出文件夹中的内容 |
读取属性 | 允许或拒绝读取文件或文件夹的属性,包括只读和隐藏 |
读取扩展属性 | 允许或拒绝读取文件或文件夹的扩展属性。文件类型不同,其扩展属性也不同 |
创建文件/写入数据 | 允许或拒绝写入数据到文件;对于文件夹,允许或拒绝在文件夹中添加文件或子文件夹 |
创建文件夹/添加数据 | 允许或拒绝在文件中添加数据;对于文件夹,允许或拒绝在文件夹中添加子文件夹 |
写入属性 | 允许或拒绝修改文件或文件夹的属性,包括只读和隐藏 |
写入扩展属性 | 允许或拒绝修改文件或文件夹的扩展属性。文件类型不同,其扩展属性也不同 |
删除子文件夹及文件 | 允许或拒绝删除子文件夹和文件,即使尚未授权对子文件夹和文件的“删除”权限(只适用于文件夹,此属性权限高于“删除”属性) |
删除 | 允许或拒绝删除文件或文件夹 |
读取权限 | 允许或拒绝一般的读取权限 |
更改权限 | 允许或拒绝更改文件或文件夹的DACL |
取得所有权 | 允许或拒绝取得对文件或文件夹的所有权 |
注:“完全控制”即拥有以上表中所有权限。
3、推荐ACL设置
普通的web应用程序文件推荐采用如下配置:
文件类型 | ACL设置 |
---|---|
脚本文件(.aspx、.aspx) | Everyone:RX(读+执行/遍历) Administrators:完全控制 System:完全控制 |
包含文件(.inc、.shtm、.shtml) | Everyone:RX(读+执行/遍历) Administrators:完全控制 System:完全控制 |
静态内容(.htm、.html、.txt、.jpg、.gif、.png) | Everyone:R(读) Administrators:完全控制 System:完全控制 |
通过在虚拟目录的文件夹中设置ACL来保护ASP或.net页面是最安全的,把这些页面放到被保护的文件夹中。保护文件夹要比保护单个文件更不容易出错。文件夹中的所有文件继承该文件夹的安全设置。但是如果该文件件没有被保护,就应该为单个文件设置保护。
利用web.config文件中,<authorization>节来保护.net Web应用程序是最安全的。而且,使用这种方式保护还有一个巨大优点,就是其超级便利的可移植性,可以直接将该文件从一个Web应用程序复制到另外一个。此外,这种方法还具有很大的灵活性,可以使用<location>节来保护某个文件或文件夹的安全。相关的知识已经在之前的章节:Windows IIS 安全配置中介绍过,这里不再赘述。
4、危险的DACL设置
NULL DACL是一种授予所有用户(包含攻击者)全部权限来访问对象的策略。NULL DACL允许任何人对对象进行任意的操作,包括读取、写入、删除文件数据,以及修改文件或文件夹访问权限。很明显,这是一种非常危险的做法。
同时,还应该警惕许多其他类型的ACE,其中被授权主体都是Everyone(更高版本可能为Users),即面向所有人:
- Everyone(WRITE_DAC):Everyone(WRITE_DAC)是一种可以在对象的安全描述符中修改其DACL的权限。如果攻击者能够获取到这个权限,毫无疑问,ta将会利用这个权限为自己的账户赋予更多权限,而且还可以拒绝其他用户的访问权限。
- Everyone(WRITE_OWNER):Everyone(WRITE_OWNER)是一种可以在对象的安全描述符中修改其所有者的权限。而Windows安全系统中,所有者会取得对象的所有权限。所以,这个ACE跟上一个一样危险。
- Everyone(FILE_ADD_FILE):Everyone(FILE_ADD_FILE)允许不受信任的用户,在文件夹中添加新的执行文件,攻击者可以写一个恶意的可执行文件(病毒木马)到文件夹,坐等管理员或任何有执行权限的用户去执行该程序。
- Everyone(DELETE):Everyone(DELETE)允许任何人删除该对象。而某些重要文件或文件夹的丢失将会导致系统崩溃。
- Everyone(FILE_DELETE_CHILD):Everyone(FILE_DELETE_CHILD)允许任意用户删除子文件夹和文件,它是在容器对象(如文件夹)中设置的。就算攻击者对子文件夹和文件没有访问权,也可以删除。
- Everyone(GENERIC_ALL):GENERIC_ALL就是完全控制,Everyone(GENERIC_ALL)和NULL DACL的危险性一模一样。
三、以编程方式创建ACL
前面我们已经了解到,如何通过手动方式创建ACL,然而手动方式始终过于繁琐,且容易出错,如果需要在部署Web应用程序时,为成千上万的文件和文件夹设置权限就会显得过于繁琐。在这种情况下,可以使用Icacls.exe,或者WMI(Windows Management Instrumentation,Windows管理规范),以编程的方式创建ACL。Icacls.exe,是Cacls.exe的替代品,是由微软开发的一个可以用于设置ACL的控制台程序,由操作系统自带,通过“开始>运行>CMD>输入Icacls.exe”打开。而WMI服务包括COM对象,这些COM对象也可以用于以编程方式设置ACL。
在ACL中正确的排列ACE很重要,因为操作系统会按顺序赋予对象权限,权限发生冲突时,在先的权限将会拥有更高的优先权。如果使用手工的方式设置ACL,操作系统会自动帮你排列好顺序,但如果以编程方式,则必须自己排列ACE的顺序。正确的顺序应该如下:
- 显式拒绝
- 显式允许
- 从双亲中继承拒绝
- 从双亲中继承允许
- 从祖父母处继承拒绝
- 从祖父母处继承允许
- 从曾祖父母处继承拒绝
- 从曾祖父母处继承允许
1、使用Icacls.exe设置ACL
可以使用如下命令行,查看“F:1.html”的DACL:
- icacls f:\1.html
就可以显示全部的DACL信息:

要使用Icacls的更多功能,必须遵循一定的语法,以下分别是文件和文件夹的设置语法:
- icacls <文件名> [/grant[:r] <Sid>:<Perm>[...]] [/deny <Sid>:<Perm>[...]] [/remove[:g|:d]] <Sid>[...]] [/t] [/c] [/l] [/q] [/setintegritylevel <Level>:<Policy>[...]]
- icacls <文件夹名> [/substitute <SidOld> <SidNew> [...]] [/restore <ACLfile> [/c] [/l] [/q]]
文件名和文件夹名是必须的,其他都是可选的。这些参数的意义分别如下:
参数 | 说明 | |
---|---|---|
<FileName>
|
指定要为其显示 Dacl 的文件。
|
|
<Directory>
|
指定要为其显示 Dacl 的目录。
|
|
/t
|
执行当前目录及其子目录中的所有指定文件上的操作。
|
|
/c
|
继续操作而不考虑文件的任何错误。 仍将显示错误消息。
|
|
/l
|
执行上一个符号链接,而不是其目标的操作。
|
|
/q
|
禁止显示成功消息。
|
|
[/save <ACLfile>[] /t[] /c[] /l[/q]]
|
将 Dacl 所有匹配的文件存储到ACLfile 以便稍后使用/restore。
|
|
[/ setowner <Username>[] /t[] /c[] /l[/q]]
|
改为指定的用户匹配的所有文件的所有者。
|
|
[/ findSID <Sid>[] /t[] /c[] /l[/q]]
|
查找所有匹配的文件包含 DACL 明确涉及指定的安全标识符 (SID)。
|
|
[/verify [/t] [/c] [/l] [/q]]
|
查找所有具有不规范或有长度与 ACE (访问控制条目) 计数不一致的 Acl 的文件。
|
|
[/reset [/t] [/c] [/l] [/q]]
|
用默认值替换 Acl 继承 Acl 的所有匹配的文件。
|
|
[/grant [: r] <Sid>: <Perm> [...]]
|
授予指定用户的访问权限。 权限替换以前的显式授予的权限。
不带: r,添加到以前被显式权限授予任何权限。
|
|
[/deny <Sid>: <Perm> [...]]
|
显式拒绝指定的用户的访问权限。 显式拒绝 ACE 的规定的权限将被添加,删除在任何显式授予的权限。
|
|
[/remove [:g|:d]] <Sid> [...]][] /t[] /c[] /l[] /q
|
从 DACL 中移除指定的 SID 的所有匹配项。
: g中删除指定的 sid 授予的权限的所有匹配项。
: d中删除指定的 SID 被拒绝的权限的所有匹配项。
|
|
[/ setintegritylevel [(CI)(OI)] <Level>: <Policy> [...]]
|
显式 ACE 完整性向所有匹配的文件。level 指定为:
完整性 ACE 的继承选项可能位于之前级别,并且只应用于目录。
|
|
[/substitute <SidOld><SidNew>[...]]
|
现有的 SID (SidOld) 替换为一个新的 SID (SidNew)。 需要direcroty参数。
|
|
/restore <ACLfile>[/c][/l][/q]
|
将存储的 Dacl 从ACLfile应用到指定的目录中的文件。 需要directory参数。
|
其中,SID可以采用数字格式或友好的名称格式。如果给定数字格式,那么请在 SID 的开头添加一个 *。
/T 指示在以该名称指定的目录下的所有匹配文件/目录上执行此操作。
/C 指示此操作将在所有文件错误上继续进行。仍将显示错误消息。
/L 指示此操作在符号链接本身而不是其目标上执行。
/Q 指示 icacls 应该禁止显示成功消息。
ICACLS 保留 ACE 项的规范顺序。
perm 是权限掩码,可以两种格式之一指定:
简单权限序列:
N - 无访问权限
F - 完全访问权限
M - 修改权限
RX - 读取和执行权限
R - 只读权限
W - 只写权限
D - 删除权限
在括号中以逗号分隔的特定权限列表:
DE - 删除
RC - 读取控制
WDAC - 写入 DAC
WO - 写入所有者
S - 同步
AS - 访问系统安全性
MA - 允许的最大值
GR - 一般性读取
GW - 一般性写入
GE - 一般性执行
GA - 全为一般性
RD - 读取数据/列出目录
WD - 写入数据/添加文件
AD - 附加数据/添加子目录
REA - 读取扩展属性
WEA - 写入扩展属性
X - 执行/遍历
DC - 删除子项
RA - 读取属性
WA - 写入属性
继承权限可以优先于每种格式,但只应用于目录:
(OI) - 对象继承
(CI) - 容器继承
(IO) - 仅继承
(NP) - 不传播继承
(I) - 从父容器继承的权限
让我们来看一些示例:
- icacls c:\windows\* /save ShowFile /T
上述命令将 c:\windows 及其子目录下所有文件的ACL 保存到 ShowFile。
- icacls c:\windows\ /restore ShowFile
上述命令将还原 c:\windows 及其子目录下存在的 ShowFile 内所有文件的 ACL。
- icacls file /grant Administrator:(D,WDAC)
上述命令将授予用户对文件删除和写入 DAC 的管理员权限。
- icacls file /grant *S-1-1-0:(D,WDAC)
上述命令将授予由 sid S-1-1-0 定义的用户对文件删除和写入 DAC 的权限。
2、WMI
WMI COM 对象可用于创建使用VBScript编写的脚本文件,从而设置ACL。如果你想学习VBScript,可以访问我们的VBScript教程。WMI COM 根对象可以用于WMI查询,获得现有对象的实例,以及创建新对象的实例。通过使用COM moniker创建WMI COM对象,如下脚本所示:
- DIM WMI
- Set WMI=GetObject("WINMGMTS:{(Security,Restore)}!\\LONDON")
前面提到的标记的末端包含一个计算机名,通过在末端指定一个远程计算机名可以修改这个标记,用以访问远程计算机上的WMI服务,也可以使用更短的标记“WINMGMTS:”访问本地计算机上的WMI服务。
WMI使用一种类似SQL的查询语法,通过使用WMI COM 根对象可以执行这种语法。ExecQuery方法将返回一个对象集,如下脚本所示:
- '查找名为DemoUser的Win32账户
- 'ExecQuery返回一个对象集
- Dim winAcc
- Set winAcc=wmi.ExecQuery("SELECT * FROM Win32_Account WHERE Name='DemoUser'")
- '为DemoUser的Win32账户获取SID
- Dim sid
- For Each acct in WinAcc
- Set sid=wmi.Get("Win32_SID='"& item.SID &"'")
- Next
在上面的select语句中,Win32_Account 是一个WMI类型的系统账户。WMI类型的表现形式既是要查询的逻辑表,也是WMI COM对象本身。通过使用微软的MSDN,可以查找给定WMI类型支持的属性。例如,在MSDN里搜索Win32_Account,就可以查看Win32_Account 类型支持的属性:
属性 | 类型 |
---|---|
标题 | 字符串 |
描述 | 字符串 |
域 | 字符串 |
安装日期 | 日期型 |
本地账户 | 布尔型 |
姓名 | 字符串 |
SID | 字符串 |
SID类型 | UInt8 |
状态 | 字符串 |
上面的属性可以用于Win32_Account 类型的对象,或作为Win32_Account 表查询中的列名。
WMI COM对象也可以用于创建新的对象实例,如下脚本所示:
- Dim Trustobj
- Set Trustobj=WMI.Get("Win32_Trustee").SpawnInstance_()
WMI COM标记也可以用于访问文件的属性,如下脚本所示:
- '打开一个文件对象和它对应的安全描述符
- Dim file
- Dim sd
- Set file=GetObject( "WINMGMTS:Win32_LogicalFileSecuritySetting='c:\file.txt'")
- If file.GetSecurityDescriptor(sd)=0 Then
- For Each item In sd.DACL
- WScript.Echo item.Trustee.Name
- Next
- End If
在前面脚本中,WMI类型Win32 LogicalFileSecuritySetting 至少包含一个方法,GetSecurityDescriptor。例如,通过在MSDN中搜索 Win32_LogicalFileSecuritySetting,将看到WMI类型支持许多属性和方法。它支持的方法如下:
方法 | 描述 |
---|---|
GetSecurityDescriptor | 返回对象的Win32_SecurityDescriptor类型的安全描述符 |
SetSecurityDescriptor | 设置对象的安全描述符 |
四、保护.net Web应用程序文件
1、config文件
.net中使用XML文件控制Web应用程序的配置,这些XML用于设置远程配置、程序集绑定配置、诊断设置和自定义应用程序首选项,它们使用.config作为文件后缀名。
全局文件Machine.config中包含用于整个计算机的全局配置数据。计算机中的其他程序可以使用自己的.config扩充或重写Machine.config的设置。这些个性化的应用程序配置文件随应用程序类型不同而不同。Web应用程序使用web.config,而可执行程序使用appname.exe配置文件。
配置文件也是可以扩展的,可以在.net配置文件中添加自定义应用程序配置设置。这些自定义设置允许将相同的配置系统用于.net配置设置和自定义的配置设置。
.net使用配置文件控制所有的Web应用程序设置,包括会话状态设置、授权和身份验证设置、代码隐藏编译设置和调试设置。所有的.net配置设置都在<system.web>节中。
先来看看Machine.config,它是覆盖整个计算机全局范围的.net配置文件,一般存放在C:\Windows\Microsoft.NET\Framework\version\CONFIG中。编辑这个文件时,一定要仔细,不然会造成大面积的应用程序异常。
再看看Web.config,它存在于每个.net Web应用程序中,甚至每个子文件夹都可以拥有一个Web.config文件以及自己的配置,且其优先权要高于父目录的Web.config文件。
2、ASP.NET请求处理
当IIS接收到一个访问.aspx文件的请求时,ISAPI(Internet Server Application Programming Interface)扩展(aspnet_isapi.dll)处理这个请求,并且通过命名管道把这个请求传送到ASP.net辅助进程(aspnet_wp.exe)。ASP.net辅助进程使用.net Framework托管类型响应这个请求。

.net 使用HttpModule响应全局的.net事件,包括开始和结束一个请求、页面缓存事件以及会话状态的获得和释放。HttpModule注册事件,然后为所有的请求接收这些事件而不用考虑文件的类型,它还实现了System.Web.IhttpModule接口。
.net使用HttpHandler按文件类型响应请求。HttpHandler实现System.Web.IhttpHandler接口,并为特定的文件类型(如.aspx)进行注册。
整个.net就是通过HttpModule和HttpHandler来执行的。例如,使用SessionStateModule 类来处理会话状态请求;使用PageHandlerFactory类来处理.aspx请求。
你也可以创建自己的HttpModule和HttpHandler,并通过Machine.config文件或Web.config文件中的项来配置HttpModule和HttpHandler。<system.web>配置中的<httpModules>元素可以添加和删除HttpModule,<httpHandlers>元素可以添加和删除HttpHandler。下面是Machine.config文件中使用这些元素的一个简短例子:
- <httpHandlers>
- <add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory" />
- <add verb="GET,HEAD" path="*" type="System.Web.StaticFileHandler" />
- <add verb="*" path="*" type="System.Web.HttpMethodNotAllowedHandler" />
- </httpHandlers>
- <httpModules>
- <add name="Session" type="System.Web.SessionState.SessionStateModule" />
- <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" />
- <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
- </httpModules>
3、HttpForbiddenHandler类
HttpForbiddenHandler类是.net 提供的HttpHandler,它拒绝任何请求的访问。HttpForbiddenHandler类的实现十分简单:它实现IHttpHandler.ProcessRequest 以递增.net性能计数器Path_forbidden,然后引发一个System.Web.HttpException异常。这个异常将停止所有的请求处理,并反馈错误信息给客户端。
一般的,Machine.config包含默认禁止的文件类型,如下所示:
- <httpHandlers>
- <!-- 遗漏的其他HttpHandler -->
- <add verb="*" path="*.asax" type="System.Web.HttpForbiddenHandler" />
- <add verb="*" path="*.ascx" type="System.Web.HttpForbiddenHandler" />
- <add verb="*" path="*.config" type="System.Web.HttpForbiddenHandler" />
- <add verb="*" path="*.cs" type="System.Web.HttpForbiddenHandler" />
- <add verb="*" path="*.csproj" type="System.Web.HttpForbiddenHandler" />
- <add verb="*" path="*.vb" type="System.Web.HttpForbiddenHandler" />
- <add verb="*" path="*.vbproj" type="System.Web.HttpForbiddenHandler" />
- <add verb="*" path="*.webinfo" type="System.Web.HttpForbiddenHandler" />
- <add verb="*" path="*.asp" type="System.Web.HttpForbiddenHandler" />
- <add verb="*" path="*.licx" type="System.Web.HttpForbiddenHandler" />
- <add verb="*" path="*.resx" type="System.Web.HttpForbiddenHandler" />
- <add verb="*" path="*.resources" type="System.Web.HttpForbiddenHandler" />
- </httpHandlers>
你还可以通过web.config扩充或修改这些项目。
.net ISAPI动态链接库aspnet_isapi.dll,向.net辅助进程aspnet_wp.exe转发http请求,aspnet_isapi.dll接收的请求只是IIS配置并传送给它的。IIS这个配置叫做“应用程序映射”。
如何查看应用程序映射?IIS6版本的方法如下:打开网站目录的属性,在“主目录”选项卡,点击应用程序“配置”按钮:

调出“应用程序配置”对话框,默认第一个的“映射”选项卡,显示了虚拟目录所有的ISAPI映射。例如,所有映射到aspnet_isapi.dll的项都被指定到ASP.net:

如果向machine.config或web.config中添加新的HttpForbiddenHandler文件类型项,那么这些文件类型必须首先映射到“应用程序配置”对话框中的aspnet_isapi.dll。如果文件类型没有被映射,那么这些类型的文件请求将无法调度到ASP.net,而HttpForbiddenHandler设置也不会生效。
IIS7或更高版本的映射位置,在一个站点的“IIS->处理程序映射”中。
注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue 发布时间:2018/1/21 23:21:52