限制对 ArcGIS Server 的跨域请求

默认情况下,ArcGIS Server 允许跨域请求,因此 Adobe Flash Player 和 Microsoft Silverlight 插件可从任意域调用服务器服务。如果希望限制来自其它域的请求,可在 Web 服务器的根级别下放置一组客户端访问策略文件,并将其编辑为仅列出信任的域。如果 Web 服务器上不存在任何访问策略文件,获取的一种简单方式是:将其选择为 ArcGIS Web Adaptor安装过程的一部分来进行安装。

什么是客户端访问策略文件?它们与 ArcGIS Server 有何关系?

Adobe Flash Player 和 Microsoft Silverlight 插件不可以访问位于 Web 应用程序所在域以外的 Web 服务。但有一种情况例外:访问的 Web 服务器包含一个列出了批准可进行域跨域请求的 Web 应用程序的客户端访问策略文件。使用 Adobe Flex 时,客户端访问策略文件名为 crossdomain.xml。使用 Microsoft Silverlight 时,该文件通常为 clientaccesspolicy.xml(尽管 Silverlight 也可使用 crossdomain.xml)。

默认情况下,ArcGIS Server 允许跨域请求。为此,在安装 ArcGIS Server 时,将在 GIS 服务器上放置一组客户端访问策略文件。禁止移除、打开或修改这些文件。

如果希望禁止其他域中托管的 Flex 和 Silverlight 应用程序使用您的 Web 服务,则应安装 ArcGIS Web Adaptor,并在 Web 服务器的根级别中单独放置一组访问策略文件。Web 适配器设置可选择性地为您创建这些文件。无论用何种方式获取这组文件,您都可以将其列表修改为仅包含信任的域。这样可降低未知 Flash Player 或 Silverlight 控件向 Web 服务发送恶意命令的可能性。

以下是通过 Web 适配器安装的 crossdomain.xml 文件。您可以修改此文件,使其限制级别更高。要了解如何修改此文件,请参阅 Adobe 跨域策略文件规范

通过 Web 适配器安装的 crossdomain.xml:

<?xml version="1.0" ?> 
<cross-domain-policy>
 <allow-access-from domain="*"/>
 <site-control permitted-cross-domain-policies="all"/>
 <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

以下是通过 Web 适配器安装的 clientaccesspolicy.xml 文件。您可以修改此文件,使其限制级别更高。要了解如何修改 clientaccesspolicy.xml 文件,请参阅使服务跨域边界可用Microsoft Silverlight 中的网络安全访问限制

通过 Web 适配器安装的 clientaccesspolicy.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<access-policy>
 <cross-domain-access>
  <policy>
   <allow-from http-request-headers="*">
    <domain uri="*"/>
   </allow-from>
   <grant-to>
    <resource path="/" include-subpaths="true"/>
   </grant-to>
  </policy>
 </cross-domain-access>
</access-policy>
警告警告:

无论是否存在客户端访问策略,都无法保证您的站点在跨站点方面没有任何弱点。例如,无论客户端访问策略文件中的内容如何,在 Flash Player 或 Silverlight 以外运行的应用程序或脚本均可通过 REST 直接调用您的服务。

9/15/2013