安全性 <security>
概述
<security>
节组位于 <system.webServer>
节中,包含的所有元素可配置 Internet Information Services (IIS) 7 服务器上的安全设置。 这些设置包括站点的安全套接字层 (SSL) 设置、依赖于通用网关接口 (CGI) 或 Internet 服务器 API (ISAPI) 二进制文件的应用程序、服务器上安装的所有身份验证模块的配置设置以及授权规则设置。 还包括 IP 安全和请求筛选配置设置以及服务器上的 ISAPI 和 CGI 限制列表。
可以组合使用 <security>
节组中的设置,以获得额外的安全性。 例如:
<authentication>
元素定义不同配置节,用于你可在 IIS 7 服务器上安装和启用的所有用户身份验证类型,而<authorization>
元素配置可以访问你的站点或应用程序的用户帐户。 可以将<authorization>
与<authentication>
结合使用,以保护对服务器上内容的访问。<access>
元素可为 Web 服务器、站点或应用程序配置 SSL 设置。<isapiCgiRestriction>
元素指定可在 IIS 7 上运行的 CGI 和 ISAPI 应用程序的列表。 此元素允许你确保恶意用户无法将未经授权的 CGI 和 ISAPI 二进制文件复制到 Web 服务器,然后运行它们。<applicationDependencies>
元素指定一个应用程序,该应用程序具有一个或多个 CGI 或 ISAPI 扩展限制的依赖项。 可以将<isapiCgiRestriction>
元素与<applicationDependencies>
元素组合在一起,以确保正确设置 CGI 或 ISAPI 扩展限制。
注意
为了增强安全性,Windows Vista 和 Windows Server 2008 默认都不会安装 IIS 7。 安装 IIS 7 时,IIS 会自动配置为仅提供静态内容,包括 HTML 和图像文件。 必须手动安装网站和应用程序所需的任何其他角色服务和功能。 这一策略大大减少了 IIS 7 攻击面。
兼容性
版本 | 说明 |
---|---|
IIS 10.0 | <security> 元素在 IIS 10.0 中未进行修改。 |
IIS 8.5 | <security> 元素在 IIS 8.5 中未进行修改。 |
IIS 8.0 | <defaultIpSecurity> 元素已添加为子元素。 |
IIS 7.5 | <security> 元素在 IIS 7.5 中未进行修改。 |
IIS 7.0 | <security> 元素是在 IIS 7 中引入的。 |
IIS 6.0 | <security> 元素取代了 IIS 6.0 中与证书、身份验证和授权相关的安全元数据库属性。 |
安装
<security>
元素包含在 IIS 7 的默认安装中。
操作方式
如何禁用匿名身份验证
打开 Internet Information Services (IIS) 管理器:
如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:
- 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows 8 或 Windows 8.1:
- 按住 Windows 键,按字母 X,然后单击“控制面板”。
- 单击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:
- 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows Vista 或 Windows 7:
- 在任务栏上,单击“开始”,然后单击“控制面板”。
- 双击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
在“连接”窗格中,展开服务器名称,展开“站点”,然后转到要配置的层次结构窗格中的级别,然后单击网站或 Web 应用程序。
滚动到“主页”窗格中的“安全性”部分,然后双击“身份验证”。
如何从 IUSR 帐户更改匿名身份验证凭据
打开 Internet Information Services (IIS) 管理器:
如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:
- 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows 8 或 Windows 8.1:
- 按住 Windows 键,按字母 X,然后单击“控制面板”。
- 单击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:
- 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows Vista 或 Windows 7:
- 在任务栏上,单击“开始”,然后单击“控制面板”。
- 双击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
在“连接”窗格中,展开服务器名称,展开“站点”,然后导航到要配置的层次结构窗格中的级别,然后单击网站或 Web 应用程序。
滚动到“主页”窗格中的“安全性”部分,然后双击“身份验证”。
在“身份验证”窗格中,选择“匿名身份验证”,然后在“操作”窗格中单击“编辑...”。
在“编辑匿名身份验证凭据”对话框中,执行以下操作之一:
如何启用基本身份验证和禁用匿名身份验证
打开 Internet Information Services (IIS) 管理器:
如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:
- 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows 8 或 Windows 8.1:
- 按住 Windows 键,按字母 X,然后单击“控制面板”。
- 单击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:
- 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows Vista 或 Windows 7:
- 在任务栏上,单击“开始”,然后单击“控制面板”。
- 双击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
在“连接”窗格中,展开服务器名称,展开“站点”,然后单击要为其启用基本身份验证的站点、应用程序或 Web 服务。
滚动到“主页”窗格中的“安全性”部分,然后双击“身份验证”。
在“身份验证”窗格中,选择“基本身份验证”,然后在“操作”窗格中单击“启用”。
如何要求安全套接字层
打开 Internet Information Services (IIS) 管理器:
如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:
- 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows 8 或 Windows 8.1:
- 按住 Windows 键,按字母 X,然后单击“控制面板”。
- 单击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:
- 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows Vista 或 Windows 7:
- 在任务栏上,单击“开始”,然后单击“控制面板”。
- 双击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
在“连接”窗格中,转到要为其配置 SSL 要求的站点、应用程序或目录。 不能在服务器级别配置 SSL。
在“SSL 设置”窗格中,单击“需要 SSL”。
在“操作”窗格中,单击“应用”。
如何为网站、Web 应用程序或 Web 服务启用 Windows 身份验证
打开 Internet Information Services (IIS) 管理器:
如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:
- 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows 8 或 Windows 8.1:
- 按住 Windows 键,按字母 X,然后单击“控制面板”。
- 单击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:
- 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”。
如果使用的是 Windows Vista 或 Windows 7:
- 在任务栏上,单击“开始”,然后单击“控制面板”。
- 双击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
在“连接”窗格中,展开服务器名称,展开“站点”,然后展开要为其启用 Windows 身份验证的站点、应用程序或 Web 服务。
滚动到“主页”窗格中的“安全性”部分,然后双击“身份验证”。
配置
配置安全设置时,配置 XML 必须包含 <security>
节组。 可以使用 ApplicationHost.config 文件在服务器级别配置安全性设置,也可以使用相应的 Web.config 文件在目录级别配置。
特性
无。
子元素
元素 | 说明 |
---|---|
access |
可选元素。 指定安全套接字层 (SSL) 的配置设置,例如是否使用客户端证书进行身份验证以及加密强度。 |
applicationDependencies |
可选元素。 指定一个应用程序,该应用程序具有一个或多个 CGI 或 ISAPI 扩展限制的依赖项。 |
authentication |
可选元素。 指定与身份验证相关的设置。 |
authorization |
可选元素。 指定与授权相关的设置。 |
dynamicIpSecurity |
可选元素。 指定阻止满足一组条件的任何 IP 地址的动态 IP 限制。 |
ipSecurity |
可选元素。 根据 IP 版本 4 地址或 DNS 域名指定访问限制。 |
isapiCgiRestriction |
可选元素。 指定可限制允许在服务器上运行哪些 CGI 和 ISAPI 程序的设置。 |
requestFiltering |
可选元素。 指定请求筛选的配置设置。 |
配置示例
以下示例为名为 Contoso 的网站配置身份验证、SSL 和请求筛选设置。
<location path="Contoso">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" />
<basicAuthentication enabled="false" />
<anonymousAuthentication enabled="false" />
</authentication>
<access sslFlags="Ssl, SslNegotiateCert, Ssl128" />
<requestFiltering>
<fileExtensions>
<add fileExtension=".inc" allowed="false" />
</fileExtensions>
<denyUrlSequences>
<add sequence="_vti_bin" />
<add sequence="_vti_cnf" />
<add sequence="_vti_pvt" />
</denyUrlSequences>
</requestFiltering>
</security>
</system.webServer>
</location>
代码示例
以下示例为名为 Contoso 的站点禁用匿名身份验证,然后为站点启用基本身份验证和 Windows 身份验证。
AppCmd.exe
appcmd.exe set config "Contoso" -section:system.webServer/security/authentication/anonymousAuthentication /enabled:"False" /commit:apphost
appcmd.exe set config "Contoso" -section:system.webServer/security/authentication/basicAuthentication /enabled:"True" /commit:apphost
appcmd.exe set config "Contoso" -section:system.webServer/security/authentication/windowsAuthentication /enabled:"True" /commit:apphost
注意
使用 AppCmd.exe 配置这些设置时,必须确保将 commit 参数设置为 apphost
。 这会将配置设置提交到 ApplicationHost.config 文件中的相应位置部分。
C#
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample {
private static void Main() {
using(ServerManager serverManager = new ServerManager()) {
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection anonymousAuthenticationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Contoso");
anonymousAuthenticationSection["enabled"] = false;
ConfigurationSection basicAuthenticationSection = config.GetSection("system.webServer/security/authentication/basicAuthentication", "Contoso");
basicAuthenticationSection["enabled"] = true;
ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Contoso");
windowsAuthenticationSection["enabled"] = true;
serverManager.CommitChanges();
}
}
}
VB.NET
Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
Sub Main()
Dim serverManager As ServerManager = New ServerManager
Dim config As Configuration = serverManager.GetApplicationHostConfiguration
Dim anonymousAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Contoso")
anonymousAuthenticationSection("enabled") = False
Dim basicAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/basicAuthentication", "Contoso")
basicAuthenticationSection("enabled") = True
Dim windowsAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Contoso")
windowsAuthenticationSection("enabled") = True
serverManager.CommitChanges()
End Sub
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var anonymousAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/anonymousAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso");
anonymousAuthenticationSection.Properties.Item("enabled").Value = false;
var basicAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/basicAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso");
basicAuthenticationSection.Properties.Item("enabled").Value = true;
var windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso");
windowsAuthenticationSection.Properties.Item("enabled").Value = true;
adminManager.CommitChanges();
VBScript
Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set anonymousAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/anonymousAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso")
anonymousAuthenticationSection.Properties.Item("enabled").Value = False
Set basicAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/basicAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso")
basicAuthenticationSection.Properties.Item("enabled").Value = True
Set windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso")
windowsAuthenticationSection.Properties.Item("enabled").Value = True
adminManager.CommitChanges()