保护 SharePoint Foundation 中的 Web 部件

上次修改时间: 2015年3月9日

适用范围: SharePoint Foundation 2010

本文内容
代码访问安全
内置的安全设置
创建代码访问安全策略

Microsoft SharePoint Foundation 中的 Web 部件为用户提供了一种与其他系统进行交互的强大方式。SharePoint Foundation 具有内置的安全设置,可限制 Web 部件对基础系统进行的访问。开发人员可以创建自定义安全策略文件来授予 Web 部件对基础系统的更高访问权限。

还可以在沙盒解决方案中创建 Web 部件。默认情况下,沙盒解决方案可对基础系统进行受限访问。这将加强 Web 部件的安全性以及对其的监控。有关沙盒解决方案的详细信息,请参阅沙盒解决方案

代码访问安全

代码访问安全性 (CAS) 是一种资源约束策略,用于限制程序集对受保护的系统资源和操作进行的访问。SharePoint Foundation 具有一些内置安全策略,这些安全策略是基于 ASP.NET 的内置安全策略构建的。默认情况下,SharePoint Foundation 使用一组最少的权限来确保服务器和基础结构不受恶意代码的影响。

如果 Web 部件需要比最低设置中提供的权限更高的访问权限,可以使用多种方式提高 Web 部件的权限,但只推荐使用其中一种方法。您可以为 Web 部件创建自定义 CAS 策略,或在 web.config 文件中增加服务器场的整体信任级别。这种方法存在安全风险,不推荐使用。有关部署的详细信息,请参阅在 SharePoint Foundation 中部署 Web 部件

内置的安全设置

默认情况下,SharePoint Foundation 为部分信任的应用程序。SharePoint Foundation 可以使用 ASP.NET 内置信任级别,但也会定义自己的信任级别:

  • WSS_UserCode

  • WSS_Minimal

  • WSS_Medium

上述信任级别对 ASP.NET 信任级别进行了扩展,以便与 SharePoint Foundation 结合使用。信任级别是在每台 Web 服务器的文件系统上的策略文件中定义的。

重要说明   默认情况下,SharePoint Foundation 中的内置 SharePoint Foundation 策略文件(名为 wss_usercode.config、wss_minimaltrust.config 和 wss_mediumtrust.config)位于 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG 目录中。

默认情况下,SharePoint Foundation 将 WSS_Minimal 信任级别应用于虚拟服务器。此信任级别授予 ASP.NET Minimal 信任以及 Web 部件连接中的所有权限。WSS_Minimal 策略限制 Web 部件访问许多资源来执行高级操作,其中包括对象模型和文件操作。

WSS_Medium 信任级别授予对环境的更高访问权。此外,WSS_Medium 还允许访问 SharePoint Foundation 对象模型和文件操作,包括读取、写入、追加和路径发现。此信任级别还允许访问环境变量。

下表列出了 WSS_Medium、WSS_Minimal 和 WSS_UserCode 策略文件在 ASP.NET 2.0 环境中授予的特定权限。

权限

WSS_Medium

信任级别

WSS_Minimal

信任级别

WSS_UserCode(沙盒解决方案)

信任级别

System.Web.AspNetHostingPermission

中等

最小

最小

System.Net.DnsPermission

Unrestricted=”True”

System.Security.Permissions.EnvironmentPermission

Read=”TEMP; TMP;USERNAME;OS;COMPUTERNAME”

System.Security.Permissions.FileIOPermission

读取、写入、追加、路径发现、应用程序目录

System.Security.Permissions.IsolatedStorageFilePermission

AssemblyIsolationByUser 和不受限制的 UserQuota

PrintingPermission

默认打印

System.Security.Permissions.SecurityPermission

断言、执行、ControlThread、ControlPrincipal、RemotingConfiguration

执行

执行

Microsoft.SharePoint.Security.SharePointPermission

ObjectModel=”True”

ObjectModel=”True”、UnsafeSaveOnGet=”True”

System.Net.Mail.SmtpPermission

Access=”Connect”

SqlClientPermission

Unrestricted=”true”

WebPartPermission

Connections=”True”

Connections=”True”

WebPermission

连接到原始主机(如果已配置)

备注

有关代码访问安全性的详细信息,请参阅在 ASP.NET 中使用代码访问安全性,也可以参阅 .NET Framework 2.0 安全指南(该链接可能指向英文页面)

创建代码访问安全策略

SharePoint Foundation 具有使用解决方案部署 CAS 策略文件的功能。建议您使用 wss_usercode.config 文件中列出的对沙盒解决方案的权限,但您也可以创建对 Web 部件的自定义权限,并使用 SharePoint Foundation 处理部署。

下面的代码示例演示 SharePoint Foundation 解决方案程序包中的 CAS 策略文件的基本结构。

<CodeAccessSecurity>
   <PolicyItem>
     <PermissionSet 
      class="NamedPermissionSet" 
      version="1"
      Description="Permission set for custom test WebParts">

        <IPermission 
          class="AspNetHostingPermission" 
          version="1" 
          Level="Minimal" 
        />

        <IPermission 
          class="SecurityPermission" 
          version="1" 
          Flags="Execution" 
        />

        <IPermission 
          class="Microsoft.SharePoint.Security.SharePointPermission, 
            Microsoft.SharePoint.Security, version=11.0.0.0, 
            Culture=neutral, PublicKeyToken=71e9bce111e9429c" 
          version="1" 
          ObjectModel="True" 
         />

        <IPermission 
          class="System.Net.WebPermission, System, 
            version=1.0.5000.0, Culture=neutral, 
            PublicKeyToken=b77a5c561934e089" version="1">
          <ConnectAccess>
            <URI uri="https?://.*" />
          </ConnectAccess>
        </IPermission>

        <IPermission 
          class="System.Security.Permissions.SecurityPermission, 
            mscorlib, version=1.0.5000.0, Culture=neutral, 
            PublicKeyToken=b77a5c561934e089" 
          version="1" 
          Flags="ControlThread, UnmanagedCode" 
        />

        <IPermission 
          class="System.Security.Permissions.EnvironmentPermission, 
            mscorlib, version=1.0.5000.0, Culture=neutral, 
            PublicKeyToken=b77a5c561934e089" 
          version="1" 
          Read="UserName" 
        />

     </PermissionSet>
     <Assemblies>
       <Assembly PublicKeyBlob=PublicKeyBlob />
     </Assemblies>
   </PolicyItem>
</CodeAccessSecurity>

以下列表中包括一些在解决方案指令清单中使用 <CodeAccessSecurity> 节时适用的一般准则。

  • 每个解决方案指令清单只可以有一个 <CodeAccessSecurity>。

  • 可以有多个 <PolicyItem> 节点。

  • 每个 <PolicyItem> 节点只能包含一个 <PermissionSet> 节点。

  • 每个 <PolicyItem> 节点只能包含一个 <Assemblies> 节点。

  • 每个 <PermissionSet> 节点可以包含多个 <IPermission> 节点。

  • <Assemblies> 节点下可以有多个 <Assembly> 节点。

有关 <CodeAccessSecurity> 区域架构的详细信息,请参阅 CodeAccessSecurity 元素(解决方案)

当使用自定义 CAS 策略部署程序集时,必须将 -CASPolicies 选项与 SharePoint Management Shell 结合使用。该命令如下所示:
Install-SPSolution –Identity <insert name> -CASPolicies <true/false>

请参阅

其他资源

在 ASP.NET 中使用代码访问安全性