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

时间:2015-01-23 02:58:11

标签: php google-chrome http citrix xenapp

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

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

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

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

TL; DR:是否可以检测:

  1. 网站访问者使用普通的本地Chrome浏览器或
  2. 通过Citrix XenApp流式传输的Chrome浏览器访问?
  3. 以下是我们获得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标头查看,没有什么特别的。

    有没有办法确定这个,甚至理论上?

    1. 我们的应用程序堆栈是LAMP,因此是PHP标记。
    2. 请不要暗示这是我们的软件错误。我们有数百个客户,数以百万计的交易,这种情况只发生在这个Citrix XenApp疯狂客户端。
    3. 编辑:这不是重复的!在这里,我谈论的是在浏览器中运行的网站和服务器端脚本。不是关于带有API和DLL的Windows应用程序

4 个答案:

答案 0 :(得分:3)

简短回答:你真的不能......对于所有意图和目的,XenApp都是远程桌面。事实上,Microsoft RDP和Citrix在某一时刻是来回许可的相同代码库。

更长的答案:当您通过XenApp启动Chrome时,Chrome实际上是在服务器上启动的。然后,通过ICA捕获,重定向并流式传输到客户端。您无法判断用户是否正在运行XenApp的标头或HTTP流量的原因是,从Chrome< - > Webserver透视图(或任何应用程序),实际上没有任何改变。唯一的delta是UI呈现的位置。

我应该提到的一件事是,如果有人在大型安装中运行XenApp,他们可能会有一些NetScalers。如果是这样,那些可以做各种奇怪的HTTP缓存,所以你可能会在错误的地方寻找你的缓存问题的解释..

答案 1 :(得分:1)

就我个人而言,我不熟悉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>

答案 2 :(得分:1)

答案 3 :(得分:0)

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