代码之家  ›  专栏  ›  技术社区  ›  jeffreyveon

长时间保持的ajax连接被反病毒程序阻止

  •  11
  • jeffreyveon  · 技术社区  · 15 年前

    好吧,这太奇怪了。我正在使用comet构建一个依赖于长时间保持的http连接的web应用程序,并使用它将数据从服务器流到应用程序。

    现在,问题是,这似乎与一些反病毒程序不太相符。我们现在是beta版,一些用户在启用防病毒功能时遇到了应用程序问题。它也不仅仅是一种特定的反病毒。当我上网时,我发现这是Avast的作品: http://avricot.com/blog/index.php?post/2009/05/20/Comet-and-ajax-with-Avast-s-shield-web-:-The-salvation-or-not

    但是,这里有人对如何处理这个问题有什么建议吗?我应该发送任何特定的标题来取悦这些安全程序吗?

    5 回复  |  直到 15 年前
        1
  •  7
  •   Ori Pessach    12 年前

    这很难。导致这种情况的防病毒功能试图防止浏览器中运行的恶意代码将您的个人数据上载到远程服务器。为此,反病毒程序尝试在所有传出流量到达网络之前对其进行缓冲,并对其进行扫描以查找预定义的字符串。

    当应用程序在套接字上发送一个完整的http请求时,这就起作用了,因为反病毒程序看到http请求的结尾,知道它可以停止扫描并发送数据。

    在您的例子中,可能只有一个没有长度字段的头,所以除非您发送足够的数据来填充防病毒缓冲区,否则不会向网络写入任何内容。

    如果这不是关闭特定功能的好理由,我不知道是什么。我和Avast和McAfee碰到过这个问题——在这一点上,反病毒行业的其他人可能正在做类似的事情。具体来说,我是用McAfee的个人信息保护功能遇到这个问题的,据我所知,这个功能实在是太麻烦了,无法使用。

    如果可以,就继续在套接字上发送数据,或者在具有长度字段的http消息中发送数据。据我所知,我试着向几家反病毒供应商报告这件事,其中一家已经修复,另一家没有。

    当然,这种功能是完全无用的。恶意应用程序要想绕过它,只需在发送数据之前将其旋转13。

        2
  •  3
  •   korkman    15 年前

    尝试使用https而不是http。也有拦截https的扫描器,但它们不太常见,上次我检查时,该功能默认为关闭。当激活时,它也破坏了firefox ssl的连接,所以我认为很少有人会激活它,而且供应商很可能会终止这个功能。

        3
  •  0
  •   Douglas Leeder    15 年前

    问题是无法按顺序扫描某些文件-需要以后的部分才能确定以前的部分是否是恶意的。

    所以扫描器对传输数据的通道有问题。我怀疑您的数据流是否能够被识别为干净的文件类型,因此扫描仪正在尝试尽可能扫描数据,我猜在扫描过程中会阻止您的数据流。

    我只能建议在小事务中进行数据传输,并且只使用comet连接进行通知(在单个通知之后关闭每个通道)。

        4
  •  0
  •   Tracker1    15 年前

    如果对web请求使用非标准端口,则可以解决此问题,还有许多其他问题,即许多浏览器都会认为这是跨域的。不知道我是否有更好的建议。这实际上取决于AV程序如何截获给定端口的流量。

        5
  •  0
  •   Ray    15 年前

    我想你会被迫断开连接重新连接。如果连接在中断情况下断开,您的代码会怎么做?我也曾遇到过类似的防火墙问题。代码必须检测到断开连接,然后重新连接。我喜欢分解数据传输的答案。