|
ES (3DES) 为 Cookie 加密。
注意:表单身份验证 Cookie 加密与 validationkey 设置无关,该密钥基于 decryptionKey 属性。
如果在 <machineKey> 上设置了 validation="SHA1",将使用 SHA1 算法检查页面级视图状态的完整性,同时假定 <pages> 元素配置为视图状态 MAC。有关详细信息,请参阅本模块前面的视图状态。
也可以将 validation 属性设置为 MD5。应该使用 SHA1,因为此算法生成的哈希值比 MD5 要大,因此更安全。
如果在 <machineKey> 上设置了 validation="3DES",将使用 3DES 算法为页面级视图状态加密(同时还检查完整性),即使 <pages> 元素配置为视图状态 MAC。
手动为 Web 场生成密钥
在 Web 场中,必须设置明确的密钥值,并在 Web 场中的所有计算机上使用相同的密钥值。请参阅本模块后面的 Web 场注意事项。
返回页首
调试
<compilation> 元素控制用于动态页面编译的编译器设置,该编译器在客户端请求网页(.aspx 文件)或 Web Services(.asmx 文件)时启动。不要在生产服务器上使用调试内部版本,这一点非常重要,因为攻击者可能会利用调试信息,并且可能会泄漏源代码的详细信息。
<compilation>
此元素控制编译进程。请确保在生产服务器上禁用调试编译。设置 debug="false",如下所示: <compilation debug="false" explicit="true" defaultLanguage="vb" />
默认情况下,将在以下目录中创建和编译临时文件: %winnt%\Microsoft.NET\Framework\{版本}\Temporary ASP.NET Files
可以使用 tempDirectory 属性指定每个应用程序的位置,但此属性在安全方面没有优势。
注意 在 <processModel> 元素上指定的 ASP.NET 进程标识要求对临时编译目录具有完全控制访问权限。
请确保不要在生产服务器上将调试文件(扩展名为 .pdb)和程序集存储在一起。
返回页首
跟踪
生产服务器上不应启用跟踪,因为系统级的跟踪信息可能会为攻击者了解应用程序并发现弱点提供很大的帮助。
<trace>
可以使用 <trace> 元素配置跟踪。在生产服务器上设置 enabled="false",如下所示: <trace enabled="false" localOnly="true" pageOutput="false"
requestLimit="10" traceMode="SortByTime"/>
如果确实需要跟踪活动应用程序的问题,最好在测试环境中模拟问题,或者启用跟踪并设置 localOnly="true"(如果需要),以防止将跟踪详细信息返回到远程客户端。
返回页首
异常管理
不允许将异常详细信息从 Web 应用程序返回到客户端。恶意用户可能会利用系统级的诊断信息来了解应用程序,并发现以后攻击时可以利用的弱点。
<customErrors>
<customErrors> 元素可用于配置自定义的一般错误消息,在应用程序发生异常时应将该消息返回到客户端。错误页面应包括相应的一般错误消息,并且可以包含额外的支持详细信息。使用此元素还可以根据异常情况返回不同的错误页面。
请确保将 mode 属性设置为 On,并且指定了默认的重定向页面,如下所示: <customErrors mode="On" defaultRedirect="YourErrorPage.htm" />
通过 defaultRedirect 属性,可以使用应用程序的自定义错误页面,例如,其中可能包括支持联系人的详细信息。
注意 不要使用 mode="Off",因为这样可能会将包含系统级信息的详细错误页面返回到客户端。
如果希望不同的错误类型返回单独的错误页面,可使用一个或多个 <error> 元素,如下所示。在本示例中,“404 (not found)”错误被重定向到一个页面,“500 (internal system errors)”被定向到另一个页面,而所有其他错误都被定向到 defaultRedirect 属性上指定的页面。 <customErrors mode="On" defaultRedirect="YourErrorPage.htm">
<error statusCode="404" redirect="YourNotFoundPage.htm"/>
<error statusCode="500" redirect="YourInternalErrorPage.htm"/>
</customErrors>
返回页首
远程处理
不要在访问 Internet 的 Web 服务器上公开 .NET 远程处理终结点。要禁用远程处理,可通过将对 .rem 和 .soap 文件扩展名的请求映射到 HttpForbiddenHandler,以禁用对这些扩展名的请求。在 <httpHandlers> 下使用以下元素: <httpHandlers>
<add verb="*" path="*.rem" type="System.Web.HttpForbiddenHandler"/>
<add verb="*" path="*.soap" type="System.Web.HttpForbiddenHandler"/>
. . .
</httpHandlers>
注意 这不会阻止 Web 服务器上的 Web 应用程序使用远程处理基础结构连接下游对象。不过,它会阻止客户端连接到 Web 服务器上的对象。
返回页首
Web Services
可以使用 <webServices> 元素配置 Web Services。建立安全的 Web Services 配置:
•
禁用不需要的 Web Services
•
禁用不使用的协议
•
禁止自动生成 WSDL
禁用不需要的 Web Services
如果不使用 Web Services,可通过将对 .asmx(Web Services)文件扩展名的请求映射到 Machine.config 中的 HttpForbiddenHandler 来禁用 Web Services,如下所示: <httpHandlers>
<add verb="*" path="*.asmx" type="System.Web.HttpForbiddenHandler"/>
. . .
</httpHandlers>
禁用不使用的协议
<protocols> 元素可以定义 Web Services 支持的协议。默认情况下,.NET Framework 1.1 上禁用 HttpPost 和 HttpGet,如下所示: <webServices>
<protocols>
<add name="HttpSoap1.2"/>
<add name="HttpSoap"/>
<!-- <add name="HttpPost"/> -->
<!-- <add name="HttpGet"/> -->
<add name="HttpPostLocalhost"/>
<add name="Documentation"/>
</protocols>
</webServices>
通过禁用不必要的协议(包括 HttpPost 和 HttpGet),可以减小受攻击面。例如,外部攻击者可能会在电子邮件中嵌入恶意链接,从而使用最终用户的安全上下文执行内部 Web Services。禁用 HttpGet 协议是一个有效的对策。这在许多方面与 XSS 攻击类似。此攻击的不同之处在于,它在公共访问网页上使用 <img src="..."/> 标记将 GET 调用嵌入 Intranet Web Services 中。这两种攻击都允许外部用户调用内部 Web Services。禁用协议可以降低风险。
如果生产服务器提供可以公共搜索的 Web Services,则必须启用 HttpGet 和 HttpPost,以便可以通过这些协议搜索该服务。
禁止自动生成 WSDL
文档协议用于动态生成 Web Services 描述语言 (WSDL)。WSDL 描述 Web Services 的特性,如该服务的方法签名和所支持的协议。客户端使用这些信息构建相应格式的消息。默认情况下,Web Services 会公开 WSDL,允许任何可以通过 Internet 连接到 Web 服务器的用户使用。
有时,可能需要手动将 WSDL 文件分发给合作伙伴,以禁止公共访问。通过这种方法,开发小组可以分别将每个 Web Services 的 .wsdl 文件分发给业务组。然后,由业务组将其分发给需要使用 Web Services 的指定合作伙伴。
要禁用文档协议,应在 Machine.config 中注释掉该协议,如下所示: <webServices>
<protocols>
<add name="HttpSoap"/>
<!-- <add name="Documentation"/> -->
</protocols>
</webServices>
返回页首
禁止访问的资源
要禁止通过 HTTP 下载受保护的资源和文件,请将这些资源和文件映射到 ASP.NET 的 HttpForbiddenHandler。
将受保护的资源映射到 HttpForbiddenHandler
HTTP 处理程序位于 Machine.config 中的 <httpHandlers> 元素下。HTTP 处理程序负责处理对特定文件扩展名的 Web 请求。不应在前端 Web 服务器上启用远程处理;只应在与 Internet 隔离的中间层应用程序服务器上启用远程处理。
•
以下文件扩展名在 Machine.config 中映射到 HTTP 处理程序:
•
.aspx 用于 ASP.NET 页面。
•
.rem 和 .soap 用于远程处理。
•
.asmx 用于 Web Services。
•
.asax、.ascx、.config、.cs、.csproj、.vb、.vbproj、.webinfo、.asp、.licx、.resx 和 .resources 是受保护的资源,被映射到 System.Web.HttpForbiddenHandler。
对于 .NET Framework 资源,如果不使用文件扩展名,则将扩展名映射到 Machine.config 中的 System.Web.HttpForbiddenHandler,如下例所示: <add verb="*" path="*.vbproj" type="System.Web.HttpForbiddenHandler" />
在本例中,.vbproj 文件扩展名映射到 System.Web.HttpForbiddenHandler。如果客户端请求以 .vbproj 结尾的路径,ASP.NET 将返回一条消息,表明“This type of page is not served”(无法提供此类型的页)。
•
以下指南适用于处理 .NET Framework 文件扩展名:
•
将不使用的扩展名映射到 HttpForbiddenHandler。如果不提供 ASP.NET 页面,则将 .aspx 映射到 HttpForbiddenHandler。如果不使用 Web Services,则将 map .asmx 映射到 HttpForbiddenHandler。
•
在访问 Internet 的 Web 服务器上禁用远程处理。将访问 Internet 的 Web 服务器上的远程处理扩展名(.soap 和 .rem)映射到 HttpForbiddenHandler。
返回页首
bin 目录
ASP.NET 应用程序虚拟根目录下的 bin 目录包含应用程序的专用程序集,如果在开发过程中使用了代码隐藏文件,则包括应用程序的页面级实现。
确保 bin 目录的安全
确保应用程序的 bin 目录的安全,并防止无意中下载业务逻辑:
•
删除 Web 权限。
•
删除所有身份验证设置。
删除 Web 权限
使用 IIS 管理单元来确保 bin 目录没有读取、写入或目录浏览权限。还要确保将“执行”权限设置为“无”。
删除所有身份验证设置
使用 IIS 管理单元从 bin 目录中删除身份验证设置。这会造成所有访问均被拒绝。
返回页首
事件日志
最小特权帐户(如 ASPNET)具有充分的权限,可以使用现有的事件来源在事件日志中写入记录。但是,其权限不足以创建新的事件来源。要创建新的事件来源,必须在以下注册表项下加入一个新条目: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\<log>
为了避免这个问题,如果具有管理员特权,可以在安装时创建事件来源。可以使用 .NET 安装程序类,通过 Windows 安装程序(如果使用 .msi 部署)或 InstallUtil.exe 系统实用程序(如果不使用 .msi 部署)可以将该类实例化。有关如何使用事件日志安装程序的详细信息,请参阅模块 10 构建安全的 ASP.NET 网页和控件。
如果在安装时无法创建事件来源,必须将权限添加到以下注册表项,并为 ASP.NET 进程帐户或任何模拟帐户(如果应用程序使用模拟)授予访问权限。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog
帐户必须至少具有以下权限:
•
查询键值
•
设置键值
•
创建子键
•
枚举子键
•
通知
•
读取
返回页首
文件访问
应用程序所访问的任何文件在 ACL 中都必须具有访问控制项 (ACE),至少为 ASP.NET 进程帐户或模拟标识授予读取权限。通常,ACL 在目录上配置,然后文件继承该设置。
除了使用 NTFS 权限限制对文件和目录的访问以外,还可以使用 ASP.NET 信任级别对 Web 应用程序和 Web Services 进行限制,以限制它们可以访问文件系统的哪些区域。例如,中等信任的 Web 应用程序只能访问其自身的虚拟目录层次中的文件。
有关 ASP.NET CAS 策略的详细信息,请参阅模块 9 ASP.NET 代码访问安全性。
返回页首
ACL 和权限
ASP.NET 进程帐户和(对于特定目录)任何模拟标识(如果应用程序使用模拟)需要以下 NTFS 权限。除了应用程序访问应用程序特定的文件系统资源所需的权限以外,还应使用表 Table 19.3 中所示的权限。
表 19.3:ASP.NET 进程帐户所需的 NTFS 权限
目录
所需权限
Temporary ASP.NET Files%windir%\Microsoft.NET\Framework\{版本}Temporary ASP.NET Files
进程帐户和模拟标识: 完全控制
临时目录 (%temp%)
进程帐户 完全控制
.NET Framework 目录%windir%\Microsoft.NET\Framework\{版本}
进程帐户和模拟标识: 读取和执行 列出文件夹内容 读取
.NET Framework 配置目录%windir%\Microsoft.NET\Framework\{版本}\CONFIG
进程帐户和模拟标识: 读取和执行 列出文件夹内容 读取
网站根目录 C:\inetpub\wwwroot 或默认网站指向的路径
进程帐户: 读取
系统根目录 %windir%\system32
进程帐户: 读取
全局程序集高速缓存 %windir%\assembly
进程帐户和模拟标识: 读取
内容目录 C:\inetpub\wwwroot\YourWebApp
上一页 [1] [2] [3] [4] [5] [6] [7] 下一页 [聊天工具]Gmail推出新功能:Web Clip__天极Yesky [聊天工具]Web MSN你玩了吗__天极Yesky [系统软件]Web Browser Express 概述 [系统软件]对Internet Explorer Web 控件做一点修改 [常用软件]小技巧:三步实现Web迅雷录制PPLive节目 [常用软件]天网防火墙:打开WEB和FTP服务 [VB.NET程序]使用VB.Net做一个配置web.config功能的WinForm(原… [VB.NET程序]vb.net控件、web service简述 [VB.NET程序]使用vbscript脚本调用web服务 [VB.NET程序]*** Web 存储系统窗体:窗体注册表 (new)***
|