限制对 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 直接调用您的服务。