如何检测站点访问者是否通过 Citrix XenApp 浏览站点?

How to detect if a site visitor is browsing the site through Citrix XenApp?

我们的客户有一个带有接收终端的小型 LAN,他们通过 Citrix XenApp 流式传输 Chrome 网络浏览器。为什么?我不知道。这很奇怪,但这种串联似乎破坏了他们在我们网站表单上提交的数据。一些物理上无法缓存的东西 — 缓存在这个 XenApp 东西的某个地方。

这对我们来说是一个非常重要的错误,因为我们管理支付处理并且它正在兑现敏感的持卡人数据,这与 PCI DDS 非常不兼容!

我们告诉他们在终端机器上安装正常的 Chrome 浏览器,他们说他们做到了。但第二天——同样的问题发生了。然后他们说——“哦,它是一台旧机器,又 [​​=11=]。”嗯!现在可能一周过去了,我们再次遇到同样的问题,但他们声称他们不再使用 XenApp,这是一个普通的本地 Chrome.

我不相信他们。但是我们怎么才能证明他们是错的呢?

TL;DR: 是否可以检测是否:

  1. 网站访问者使用普通的本地 Chrome 浏览器或
  2. 在通过 Citrix XenApp 流式传输的 Chrome 浏览器下访问过?

这是我们得到的 USER_AGENT 的示例:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36

它看起来像一个完全正常的 Chrome 构建。尝试查看 HTTP headers 并没有什么特别之处。

有没有办法确定这一点,即使是理论上的?

  1. 我们的应用程序堆栈是 LAMP,因此是 PHP 标记。
  2. 请不要暗示这是我们的软件错误。我们有数百个客户,数百万笔交易,这种情况只发生在这个 Citrix XenApp 疯狂的客户身上。

编辑:这不是重复的!我在这里谈论的是浏览器中的网站 运行 和 server-side 脚本。与带有 API 和 DLL 的 windows 应用程序无关

简短回答:您真的不能.. XenApp 就所有意图和目的而言都是远程桌面。事实上,Microsoft RDP 和 Citrix 曾一度使用相同的代码库来回许可。

更长的答案:当您通过 XenApp 启动 Chrome 时,Chrome 实际上是在服务器上启动的。然后,显示会被捕获、重定向并通过 ICA 流式传输到客户端。您无法通过 headers 或 HTTP 流量判断用户是否为 运行 XenApp 的原因是从 Chrome<->Web 服务器的角度(或任何应用程序) ,没有什么真正改变。唯一的差异是 UI 被渲染的地方。

我应该提到的一件事是,如果某人的 运行 XenApp 在 large-ish 安装中,他们可能有一些 NetScaler 正在运行。如果是这样,它们可以执行各种奇怪的 HTTP 缓存,因此您可能在错误的地方寻找缓存问题的解释..

您可能可以使用他们的 IP 地址来检测他们。 如果他们使用 XenApp,他们的 IP 将与本地局域网不同。

就我个人而言,我不熟悉 Citrix XenApp,但摘自此处 http://www.citrix.com/products/xenapp/how-it-works/application-virtualization.html 是 Citrix XenApp 的工作方式。

了解应用程序虚拟化 Citrix 应用程序虚拟化技术将应用程序与底层操作系统和其他应用程序隔离开来,以提高兼容性和可管理性。作为现代应用程序交付解决方案,XenApp 通过集成的应用程序流和隔离技术对应用程序进行虚拟化。这种应用程序虚拟化技术使应用程序能够从一个集中位置流式传输到目标设备上的隔离环境中,并在其中执行。使用 XenApp,应用程序不是传统意义上的安装。应用程序文件、配置和设置被复制到目标设备,运行 时间的应用程序执行由应用程序虚拟化层控制。 执行时,应用程序 运行 认为它直接与操作系统交互,而实际上,它与代理对操作系统的所有请求的虚拟化环境交互。 XenApp 的独特之处在于它是一个完整的虚拟应用程序交付系统,通过应用程序托管和应用程序流的组合直接向用户设备提供在线和离线应用程序访问。当用户请求应用程序时,XenApp 会确定他们的设备是否兼容以及是否能够 运行 运行相关应用程序。目标设备的最低要求是兼容 Windows® 操作系统和适当的 Citrix 客户端软件。如果用户设备满足最低要求,则 XenApp 会通过应用程序流直接启动应用程序虚拟化到用户设备上的隔离环境中。如果用户设备无法 运行 特定应用程序,XenApp 会启动会话虚拟化。

防止在您的 htaccess 文件中进行缓存。

Header set Cache-Control "private, max-age=0, no-cache, no-store, must-revalidate" env=NO_CACHE

如果您想防止对某些文件类型进行缓存,请尝试以下示例:

  <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
    Header set Cache-Control "private, max-age=0, no-cache, no-store, must-revalidate" env=NO_CACHE
    </FilesMatch>

检查 Citrix 特定的 HTTP headers:

  • X-Citrix-Gateway
  • X-Citrix-Via

和一个代理 header:

  • X-Forwarded-For

和 Citrix 特定的 cookie:

  • WIUser=
  • WINGDevice=
  • WINGSession=
  • WIClientInfo=

和 Citrix 特定的 SSL 错误:

  • SSL 错误 61
  • SSL 错误 75
  • SSL 错误 74

参考资料