通用权限和在 ASP.NET 中与安全相关的问题疑难解答

文章翻译 文章翻译
文章编号: 910449 - 查看本文应用于的产品
ASP.NET 支持语音列

通用权限和 Microsoft ASP.NET 中的安全相关问题的疑难解答

若要自定义此列与您的需求,我们希望邀请您提交您感兴趣的主题和您感兴趣的在将来解决知识文库文章和 Support Voice 专栏您想要查看的问题的主题的想法。您可以提交自己的想法和反馈使用 提出要求 窗体。还有一个链接到窗体中此列的底部。
展开全部 | 关闭全部

本文内容

大家好,这是 Vignesh A.G 从 ASP.NET 团队。欢迎访问 ASP.NET 支持语音列 !我已经被开发人员技术支持工程师 forover 现在在 Microsoft,两年,我花了我将重点放在 ASP.NETand Microsoft Internet Information Services (IIS) 的时间。

介绍了 ASP.NETsecurity,而是概括几个故障排除的技巧和提示您隔离并解决一些常见权限和我们这里看到在 PSS 安全 scenariosthat,willhelp,将不会本专栏的焦点。权限和安全相关的问题,在 ASP.NET 中是有文档记录的 verywell。事实上,将有大量好的 mighthave 遇到了同样的问题,在您之前的人。因此,其目的是为此列是 ASP.NET 安全性好地方 tofind 相关和详尽信息。有 isno 更好地感受到比自己解决问题。

非常有用的工具

您尝试修复任何已损坏的内容之前,需 tofamiliarize 自己有几个工具,它将帮助您缩小 theissue。在我们的例子中,我们应感兴趣 filemon 之类,RegMon,阈之类的工具审核。有关 filemon 之类的详细信息,请访问下面的 Microsoft Web 站点:
http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx
RegMon 有关的详细信息,请访问下面的 Microsoft Web 站点:
http://technet.microsoft.com/en-us/sysinternals/bb963881.aspx

向下钻取以找出问题

  • 具有应用程序以前是否正常吗?如果是的话,然后什么 changedthat 可能进行了应用程序中断?很可能在服务器上应用了 orsecurity 的软件更新的更新。代码推广还可以 havecaused 问题。
  • 并从 IIS 提供的简单的.html 和.asp 页吗?
  • 应用程序已迁移到另一版本 ofIIS 吗?
  • 在服务器失败,并出现相同错误的其他 ASP.NET 应用程序?这是唯一的应用程序出现故障吗?
  • 为所有用户或仅特定用户是否出现问题吗?
  • 是可重现问题,在这些服务器上的本地浏览时,还是可重现的只有少数客户端吗?
  • 如果您正在使用模拟,然后 impersonateduser 没有必需的访问权限的资源吗?
上述问题很有用来诊断问题。如果要在任何 ASP.NET 论坛上发布您的问题,如果 youalready 有大部分这些问题的答案,那么很可能,youwill 获得快速的指针或对您的问题的解决方案。关键是要发布 thewhole ASP.NET 堆栈跟踪错误,如果适用,而不是说"我将在尝试运行我的 ASP.NET 应用程序时 gettingan 访问被拒绝错误。Anyonehelp?"can为查看堆栈跟踪,他们可以看到完整的错误消息时,给出 youpointers 的人更容易得多。因此,您需要 askyourself...

什么是确切的错误消息?

我们问客户的第一个问题是,"什么是确切的 errormessage 吗?"如果您有清晰的说明,由 Microsoft.NET Framework 引发的错误消息,则可以跳过本节。如果您的应用程序掩盖了实际的错误 messageand 为您提供友好的错误消息,例如,"意外的错误 hasoccurred。请与网站管理员联系以了解详细信息,"它不是任何人的 ofmuch 使用。以下是几个步骤,它将帮助您获得的 actualerror 消息。
  • 查找并打开 applicationdirectory 中的 Web.config 文件,为模式更改customErrors ="关闭"。保存该文件,并再现 theproblem。
  • 仍未有可能由应用程序开发人员自定义的事件错误 handlingdone 由于遵循上面的步骤之后查看实际的 errormessage。您可以尝试找到Application_Error事件 Global.asax 文件中注释掉的任何代码都可以使用Server.Transfer("Errors.aspx")函数来转到一个自定义错误页。
/Global.asax 
void Application_Error(object sender, EventArgs e) 
 {
  // Code that runs when an unhandled error occurs
  //Server.Transfer("Errors.aspx"); 

  } 
一旦收到实际的错误消息,读取它以确定 theerror 由缺少的权限在本地资源或您的 ASP.NET 应用程序正试图访问远程 resourcethat 上。

提示您可以联系您的开发人员了解如何看到 actualerror 的消息。很可能您的开发人员可能正在记录其文件或 gettinge 邮件的通知。始终记住使该您 aregoing 更改的任何文件的备份。使用可用的备份,您可以始终回滚任何更改。

发生问题的原因是缺少权限的 ASP.NET 应用程序尝试访问本地资源

如果您是无法获取的自定义错误消息 problembecause 清楚说明,运行 FileMon 和重现该问题。Stopand 将捕获另存为 FileMon.xls,在 Microsoft Excel 中打开该文件。在数据菜单上,单击筛选器,然后单击自动筛选使用筛选功能 ofExcel。现在选择 F 列中的下拉列表,并查看"访问被拒绝"错误。

FileMon 输出的示例所示。
10381 1:01:11 PM w3wp.exe:2320 OPEN
				C:\winnt\microsoft.net\framework\v1.1.4322\Temporary ASP.NET
				Files\sessiontest\8832e585\275ec327\global.asax.xml ACCESS DENIED NT
				AUTHORITY\NETWORK SERVICE
正如您可以看到从 filteredresults,我们需要缩小问题的原因。FileMon 演示的 NTAUTHORITY\NETWORK 服务帐户没有 theC:\Winnt\Microsoft.net\Framework\v1.1.4322\Temporary ASP.NET 文件的文件夹的 NTFS 权限。这应该是直截了当解决。 有关使用 FileMon 解决 ASP.NET 的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
890960 ASP.NET 使用 filemon 之类的疑难解答
提示 一个好的步骤是将 ASP.NET 进程帐户更改为 anAdmin 帐户,如果它可以解决此问题,请参阅。在 IIS 中可以使用以下方法将更改用户名为"系统"的流程模型中的 IIS 6.0 中 machine.config fileand 5.x 可以将更改 IIS 应用程序池标识为"本地系统"tosee 如果应用程序的工作。

注意这不应作为一种解决方案,butonly 作为故障排除的步骤使用。

大多数人会趋向于 toreinstall Microsoft.NET Framework 或甚至转到程度重新安装操作系统。这不是推荐的故障排除步骤,并执行 notguarantee,该问题将不会再次出现。我将提供一个这样的例子。间歇问题通常很难隔离和解决。在 thisscenario 中客户的应用程序将工作正常的几个小时,然后突然所有研发它将都失败,出现以下错误。Reinstallingthe.NET Framework 以及操作系统,客户已经有尝试。这似乎在几天内,修复 theproblem,但然后它现象重新出现。

收起这个图片展开这个图片
中的服务器错误 / MyApp'Application


运行 FileMon 未带来任何访问 DENIEDerrors。为 ASPNET 帐户的所有必要的权限已存在。从问题中恢复的 Theonly 方法是重新启动框。即使 IIS resetwould 不帮助。您认为"Ah、 Microsoft 软件始终需要 rebootto 中恢复?"嗯,您是错误的 !

这里的关键是要仔细查看错误消息。错误中清楚地指出"无法打开文件以进行写入,"使用 andnot 连接常规访问被拒绝错误,所以我想它某些其他 processthat 是锁在一个文件或文件夹上,不允许 ASP.NET writeto 它。因此有必要重新启动已终止其他进程,和 theASP.NET 应用程序启动时重新运行直到恶意进程锁定 fileagain。逻辑的办法就是关闭所有防病毒程序、 间谍软件第三方或监控软件的服务器上运行的任何其他文件。我这样做 notwant 指出任何特定第三方软件。但是,一般情况下,softwareis 防病毒已知会导致大量的 IIS 和 ASP.NET 应用程序的麻烦。由防病毒软件引起的 Anotherknown 问题时接触到 Bin 文件夹中或.config 文件 AppDomainrecycles 丢失会话。

提示关闭第三方服务的最简单方法是:
  1. 单击开始,单击运行,然后键入 msconfig.
  2. 选择服务,并检查隐藏所有 Microsoft 服务
  3. 单击全部禁用停止第三方服务。
  4. 单击开始,单击运行,然后键入 iisreset若要重新加载 CLR,到辅助进程。
监视应用程序请参见问题再次出现。如果运行多个防病毒程序,使用哪个特定程序导致该问题的试验和错误方法 todetermine。

注意如果同样的错误是可重现 100 % 的时间,您的防病毒软件不可能原因。Therecan 是其他原因导致此错误。请尝试创建简单的 ASP.NET 测试应用程序 toisolate,是否为 Test.aspx 页面出现同样的错误。如果是这样,确认所需的访问控制列表 (Acl) 是在 ASP.NET 中的位置。

请参阅 ASP.NET 所需的访问控制列表 (Acl):http://msdn2.microsoft.com/en-us/library/kwzs111e.aspx

提示%SystemRoot%\Assembly 文件夹是在全局程序集缓存。不能直接使用 Windows 资源管理器对 thisfolder 的编辑 Acl。而使用命令提示符处,运行以下命令:
cacls %windir%\assembly /e/t/p domain\useraccount:r
或者,在使用 Windows 资源管理器中,用下面的命令来授予权限通过 GUI unregisterShfusion.dll:
C:\WINDOWS\Microsoft.NET\Framework\版本号1>regsvr32 – u shfusion.dll
之后设置与 Windows 资源管理器中,使用以下命令重新-registerShfusion.dll 的权限:
C:\WINDOWS\Microsoft.NET\Framework\版本号1>regsvr32shfusion.dll

发生问题的原因是缺少对 ASP.NET 应用程序正试图访问远程资源的权限

当 ASP.NET 应用程序访问的远程资源 likeMicrosoft SQL Server 或通用命名约定 (UNC) 共享时,有许多事都可能会出现错误。此外,很多事情可能 beincorrectly 远程资源上的设置。您将需要以获取资源工作中解决这些问题。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
891031 从 ASP.NET 应用程序访问远程资源时的常见安全问题
第一步是,是否您可以通过 Windows 资源管理器的远程服务器连接,请参阅。
  1. 在远程服务器上,创建一个名为的测试文件夹中的测试在共享安全选项卡文件夹、 添加您的域/帐户,工作进程帐户,它是使用 ASP.NET 应用程序和 givethem 这两个完全的控制。

    注意请参见891031 为从 ASP.NET 访问远程资源的方法 orworkarounds。
  2. 在 IIS 服务器上中,,使用域帐户登录,单击开始,单击运行,然后键入远程服务器的 UNC 共享路径:
    \\RemoteServerName\Test
    如果您不能访问此文件夹,请联系您的 NetworkAdministrator,若要解决此问题。然后才可以共享您的 ASP.NET 应用程序 accessthe。
  3. 创建与您的应用程序目录中的文件保存代码 belowand 名为 CreateUNCFile.aspx 的文件。
    <%@ Page Language="vb" %>
    <%@ Import Namespace="System.IO" %>
    <html>
      <head>
      <title>Writing to a Text File</title>
    <script runat="server">
        Sub WriteToFile(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Dim fp As StreamWriter
                fp = File.CreateText("\\<RemoteServerName>\Test\" & "test.txt")
                fp.WriteLine(txtMyFile.Text)
                lblStatus.Text = "The File Successfully created! Your ASP.NET process is able to access this remote share"
                fp.Close()
        End Sub
    </script>
    
    </head>
    <body style="font: 10pt verdana">
                <h3 align="center">Creating a Text File in ASP.NET</h3>
        <form id="Form1" method="post" runat="server">
                            Type your text:
                            <asp:TextBox ID="txtMyFile" TextMode="MultiLine" Rows="10" Columns="60" Runat="server" /><br>
                            <asp:button ID="btnSubmit" Text="Create File" OnClick="WriteToFile" Runat="server" />
                            <asp:Label ID="lblStatus" Font-Bold="True" ForeColor="#ff0000" Runat="server" />
        </form>
    </body>
    </html> 
    
  4. 请确保您修改 <RemoteServerName></RemoteServerName> 下面的代码行中
    fp = File.CreateText("\\<RemoteServerName>\Test\" &	"test.txt")
    因此,它反映了您的远程服务器的名称。
  5. 打开 Windows Internet Explorer 并浏览 tohttp: / /IISServerName/应用程序名/CreateUNCFile.aspxfrom 而不是 IIS 服务器的客户端计算机。
  6. 如果成功创建 Test.txt 文件,然后 yourASP.NET 应用程序可以对远程资源进行验证。
  7. 如果文件创建失败从 Internet Explorer 客户端浏览器,但您浏览到该页从 IIS 服务器上的 worksif,它是的 likelythat 您运行到一个"双跃点"的方案。如果使用的内置的自定义 Web 部件来访问远程资源的用户身份验证和授权要求,您可能会遇到"双跃点"问题。为了访问远程资源,您可能需要提供对资源的最终用户的凭据,以便从资源的输出仅限于最终用户有权访问的数据。
以上步骤假定您已在 IIS 中启用 NTLM 身份验证。基本身份验证不使用 Kerberos。 有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
907272 Kerberos 身份验证,并委派问题进行故障排除
326985 如何在 IIS 中与 Kerberos 相关的问题进行疑难解答
有关 IIS 身份验证方法的详细信息,seethe 以下 Microsoft 开发人员网络 (MSDN) Web 站点:
http://msdn2.microsoft.com/en-us/library/aa292114 (VS.71).aspx


提示如果您可以连接到的远程 UNC 共享,但您不能连接到远程服务器正在运行 SQL Server 从 ASP.NET 应用程序,您可能需要检查 orset 的 SQL Server 服务主体名称 (Spn)。尝试启用仅在 IIS 中的 yourapplication 的基本身份验证,您是否能够连接到运行 SQL Server 的远程服务器,请参阅。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
319723 如何在 SQL Server 中使用 Kerberos 身份验证
316989 您创建的受信任的数据连接从 ASP.NET 到 SQL Server 时出现错误消息:"用户登录失败: 帐户名"
提示永远不会建议使用映射的驱动器连接到 remoteresource,因为驱动器映射的net use命令扩展,并且在每用户基础上创建的。存在于远程计算机的 Web 服务器的首选的 methodof 访问内容是使用共享的 UNC。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
257174 与 IIS 使用映射的驱动器

代码访问安全性 (CAS) 与相关问题

ASP.NET 中的错误消息将详细介绍,并时常,告诉您完全问题是什么。在某些情况下,FileMon 或 RegMon 可能 notcapture 任何有用的操作。让我们看一看这样的一个方案。

方案

在尝试浏览某个 ASP.NET 应用程序,它将失败并出现一般性错误 (如以下臭名昭著的错误:
收起这个图片展开这个图片
服务器 ApplicationUnavailable
显示事件日志:
事件类型: 错误
事件源: ASP.NET 1.1.4322.0
事件类别: 无
事件 ID: 1088年
日期: 10/11/2006
时间: 下午 10:54:04
用户: 不适用
计算机: 计算机名称
说明:
未能执行请求,因为无法创建应用程序域。错误: 0x8013150a
创建一个 ASP.NET 应用程序域时,ASP.NET readsthe 值指定的配置元素的信任级别属性、 创建AspNetHostingPermission类的一个实例与指定的级别属性中,然后将类添加到设置为应用程序域的权限。如果信任级别配置或修改的 areincorrectly,您将看到上面的错误。有关详细信息,see"ASP.NET TrustLevels 和策略文件"下面的 MSDN Web 站点:
http://msdn2.microsoft.com/en-us/library/wyts434y.aspx
若要解决此问题,您可以 trythis 提示 "因为缺少 ASP.NET 应用程序尝试访问的本地资源上的权限出现问题"部分中,但办不 getdisheartened 应用程序并不适用于管理员或 SYSTEMaccount。您需要检查以确认是否可以通过代码访问 Security.This 导致问题可以轻松地进行关闭使用 theCaspol.exe 实用程序的代码访问安全性。
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 1&gt;关闭 caspol-s
Microsoft (R).NET Framework CasPol 1.1.4322.573
版权所有 (C) 微软公司 1998年-2002年。保留所有权利。

成功

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 1&gt;
Onceyou 具有运行caspol – s 关闭,重置 IIS 尝试浏览应用程序。Ifthis 的工作原理,您然后需检查的权限集的代码组的步骤。您可以访问 Microsoft.NET Framework 中的代码组 版本号在管理工具中找到的配置工具。

在这种情况下,权限设置My_Computer_Zone代码组被设置为Nothing。将其更改为完全信任解决了问题

注意若要访问My_Computer_Zone的代码组,请执行以下步骤:
  1. 在控制面板中,双击管理工具
  2. 双击Microsoft.NET Framework<b00> </b00> 版本号 配置。
  3. 双击运行时安全策略
  4. 双击计算机
  5. 双击CodeGroups
  6. 双击all_code
  7. 双击My_Computer_Zone
提示记住要运行在 caspol – s fixedthe 问题一旦打开 CA。

有关详细信息,请参见 ASP.NET 代码访问安全:http://msdn2.microsoft.com/en-us/library/87x8e4d1.aspx

已经"服务器应用程序不可用"errormessage 的各种其他原因。事件日志是最佳选择,原因是问题上获取更多详细信息。

与 IIS 相关的错误

IIS 日志是在 IIS 身份验证相关的错误的情况下非常有用。用户通常会看到以下时,一种常见情况:
收起这个图片展开这个图片
要查看此页面的 notauthorized
您需要寻找的是此特定错误状态和子状态代码。
2006-10-12 22:47:28 W3SVC1 65.52.18.230 获取 /MyAPP-80 /login.aspxMyDomain\UserID_91 65.52.22.58Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+InfoPath.1)401 3 5
我们可以看到,401 子状态 3,这表示"由于在资源上的 ACL 而未经授权。"

这表明缺少的文件或文件夹上的 NTFSpermissions。即使 permissionsare 更正的文件您尝试访问,但对其他系统和 IIS 文件夹,defaultpermissions 和用户权限可能会丢失,则可能发生此错误。例如,如果 iusr_ 计算机名帐户不 haveaccess 到 C:\Winnt\System32\Inetsrv 目录,您可能看到此错误。有关 IIS 状态代码的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
318380 Microsoft Internet Information Services (IIS) 5.0 和 6.0 状态代码的描述
812614 用于 IIS 6.0 的默认权限和用户权限
271071 如何 setrequired NTFS 权限和 IIS 5.0 Web 服务器的用户权限
提示单击开始,单击运行,然后类型 日志文件 若要打开的文件夹,其中包含 theIIS 日志。或者,在为您的网站在 IIS 中的属性页中,单击网站名称选项卡,然后在活动日志格式中,单击属性以查看的日志文件目录和名称。

这里感兴趣的其他事情是状态代码 5。在此状态代码可以使用net helpmsg命令 toget 详细信息:
C:\Documents 和 Settings\User 1&gt;净 helpmsg 5
访问被拒绝。
让我们尝试另一种常见状态代码,代码 50:
C:\Documents 和 Settings\User 1&gt;净 helpmsg 50
不支持该请求。
提示无论何时得到另一个泛型臭名昭著"500 内部 ServerError"消息,则最好禁用友好 HTTP 错误消息,以便您可以 receivea 详细的错误说明。别忘了在事件中查找 vieweras,它还可能包含详细信息。
有关如何禁用友好 HTTP 错误消息的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
294807 关闭服务器端的 Internet Explorer 5.x 和 6.x 版"显示友好 HTTP 错误消息"功能
这一想法是使用所有记录的月初可用在手头的问题上获得最大的详细信息。

资源

有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
306590 ASP.NET 安全性概述
317012 在 ASP.NET 中的进程,并请求标识
如何创建 ASP.NET 2.0 应用程序的服务帐户
http://msdn2.microsoft.com/en-us/library/ms998297.aspx

ASP.NET 恒等矩阵
http://msdn2.microsoft.com/en-us/library/aa302377.aspx

ASP.NET 支持语音前列
http://support.microsoft.com/aspnetpsvc
我希望这些简单的技术可用于帮助您 resolvesecurity 和权限相关的问题。请记住,支持语音列 arefor 您 !与以往一样,您可以随意使用提出要求 窗体提交有关您想要查看地址 infuture 列的主题或知识文库中的意见。

属性

文章编号: 910449 - 最后修改: 2014年12月23日 - 修订: 1.0
这篇文章中的信息适用于:
  • Microsoft ASP.NET 2.0
  • Microsoft ASP.NET 1.1
关键字:?
kbhowto kbasp kbmt KB910449 KbMtzh
机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 910449
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com