长时间保持的 AJAX 连接被防病毒软件阻止

11

好的,这真是太奇怪了。我正在开发一个基于COMET的Web应用程序,依赖于长时间保持的HTTP连接,并使用它来从服务器向应用程序流式传输数据。

问题在于,这似乎与一些反病毒程序不兼容。我们现在处于测试版阶段,一些用户在启用反病毒程序时遇到了应用程序问题。而且,这不仅仅是一个特定的反病毒程序问题。当我在网上查找时,我发现了针对 Avast 的解决方法: http://avricot.com/blog/index.php?post/2009/05/20/Comet-and-ajax-with-Avast-s-shield-web-:-The-salvation-or-not

但是,这里有没有人有关于如何处理此问题的建议?我应该发送任何特定的标头以取悦这些安全程序吗?

5个回答

7
这是一个棘手的问题。导致这种情况的反病毒功能试图防止恶意代码在浏览器中运行并将您的个人数据上传到远程服务器。为此,反病毒程序尝试在所有传出流量到达网络之前缓冲它,并扫描预定义的字符串。
当应用程序在套接字上发送完整的HTTP请求时,这将起作用,因为反病毒程序会看到HTTP请求的结尾,并知道可以停止扫描并发送数据。
在您的情况下,可能只有一个没有长度字段的标头,因此除非您发送足够的数据来填充反病毒程序的缓冲区,否则不会写入网络。
如果这不是关闭该特定功能的好理由,那我就不知道还有什么理由了。我曾经遇到过AVast和McAfee的这种情况 - 到目前为止,其他反病毒软件公司可能正在做类似的事情。具体而言,我在使用McAfee的个人信息保护功能时遇到了这个问题,据我所知,这个功能太过错误,无法使用。
如果可以的话,继续在套接字上发送数据,或者发送带有长度字段的HTTP消息中的数据。我尝试向一些反病毒供应商报告此问题 - 其中一个修复了它,另一个则没有,据我所知。
当然,这种功能完全无用。恶意应用程序需要做的就是在发送数据之前对其进行ROT13编码即可绕过它。

3

尝试使用https而不是http。虽然也有拦截https的扫描器,但它们较少见,并且上次我检查时默认关闭了该功能。当激活时,它还会破坏Firefox的SSL连接,因此我认为很少有人会激活它,而供应商也希望取消该功能。


0

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


0

问题在于有些文件不能按顺序扫描 - 后面的部分需要确定前面的部分是否恶意。

因此,扫描器对于正在流式传输数据的通道存在问题。我怀疑您的数据流无法被识别为干净的文件类型,因此扫描器正在尽力进行扫描,并且在此过程中可能会阻塞您的数据流。

我唯一能建议的是以小事务方式进行数据传输,并仅使用COMET连接进行通知(在单个通知后关闭每个通道)。


0

如果您在Web请求中使用非标准端口,您可能可以解决此问题,但还有其他一些问题,即许多浏览器将其视为跨域。我不确定是否有更好的建议。这实际上取决于AV程序如何拦截给定端口的流量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接