2010-02-28 10 views
11

Ok, questo è decisamente bizzarro. Sto creando un'applicazione web che si basa su una connessione HTTP di lunga durata che utilizza COMET e che utilizza questo per trasmettere i dati dal server all'applicazione.Connessione AJAX da tempo bloccata da Anti-Virus

Ora, il problema è che questo non sembra andare bene con alcuni programmi anti-virus. Siamo ora in versione beta e alcuni utenti si trovano ad affrontare problemi con l'applicazione quando l'anti-virus è abilitato. Non è solo un antivirus specifico. Ho trovato questo lavoro in giro per Avast quando guardavo online: http://avricot.com/blog/index.php?post/2009/05/20/Comet-and-ajax-with-Avast-s-shield-web-:-The-salvation-or-not

Tuttavia, qualcuno qui ha qualche suggerimento su come gestire questo? Devo inviare una specifica intestazione per soddisfare questi programmi di sicurezza?

risposta

7

Questo è un duro. Il tipo di funzionalità anti-virus che provoca questo tenta di impedire il codice malizioso in esecuzione nel browser dal caricamento dei dati personali su un server remoto. Per fare ciò, l'anti-virus cerca di bufferizzare tutto il traffico in uscita prima che colpisca la rete, e scannerizzarlo per stringhe predefinite.

Questo funziona quando l'applicazione invia una richiesta HTTP completa sul socket, poiché l'antivirus vede la fine della richiesta HTTP e sa che può interrompere la scansione e inviare i dati.

Nel tuo caso, probabilmente c'è solo un'intestazione senza un campo di lunghezza, quindi finché non invii abbastanza dati per riempire il buffer dell'antivirus, nulla verrà scritto sulla rete.

Se questa non è una buona ragione per disattivare quella particolare funzione, non so cosa sia. Mi sono imbattuto in questo con AVast e McAfee - a questo punto, il resto dell'industria anti-virus sta probabilmente facendo qualcosa del genere. In particolare, mi sono imbattuto in questo con la funzionalità di protezione delle informazioni personali di McAfee, che per quanto posso dire è semplicemente troppo buggata da usare.

Se è possibile, è sufficiente continuare a inviare dati sul socket o inviare i dati nei messaggi HTTP che hanno un campo di lunghezza. Ho provato a segnalarlo a un paio di venditori di antivirus: uno di essi lo ha risolto, l'altro no, per quanto ne so.

Naturalmente, questo tipo di funzionalità è completamente inutile. Tutta l'applicazione dannosa avrebbe bisogno di fare per aggirare è a ROT13 i dati prima di inviarlo.

0

Il problema è che alcuni file non possono essere scansionati in ordine - le parti successive sono necessarie per determinare se le parti precedenti sono dannose.

Quindi gli scanner hanno un problema con i canali che stanno trasmettendo dati. Dubito che il tuo flusso di dati sia in grado di essere riconosciuto come un tipo di file pulito, quindi lo scanner sta tentando di eseguire la scansione dei dati nel miglior modo possibile, e suppongo che si tratti di tenere il tuo stream nel processo.

L'unica cosa che posso suggerire è di effettuare il trasferimento dei dati in piccole transazioni e utilizzare la connessione COMET solo per le notifiche (chiudendo ogni canale dopo una singola notifica).

0

Se utilizzi una porta non standard per le tue richieste web, potresti riuscire a ovviare a questo problema, ci sono una serie di altri problemi, vale a dire che questo verrà considerato come dominio incrociato da molti browser. Non sono sicuro di avere un suggerimento migliore da offrire qui. Dipende davvero da come il programma AV intercetta il traffico di una data porta.

0

Penso che sarai costretto a interrompere la connessione e riconnetterti. Che cosa fa il tuo codice se la connessione si interrompe in una situazione di indisponibilità? Ho avuto un problema simile con un firewall una volta. Il codice doveva rilevare la disconnessione, quindi riconnettersi. Mi piace la risposta sulla rottura del trasferimento dei dati.

3

Provare a utilizzare https anziché http. Ci sono scanner che intercettano anche https, ma sono meno comuni e la funzione è stata disattivata l'ultima volta che ho controllato. Ha anche infranto la connettività di Firefox SSL quando attivato, quindi penso che poche persone lo attiveranno e il venditore spererà di ucciderla.