Avendo una extranet costruita con HCL Domino per gli accessi dall’esterno diviene abbastanza comune dare agli utenti esterni la possibilità di caricare/condividere un file tramite l’interfaccia browser. Ma cosa succede se il file si porta dietro un qualche tipo di virus o malware?
La domanda dovrebbe essere comune e tutti dovremmo farcela: se il file infetto viene accettato dal sistema e memorizzato in un file .nsf le eventuali scansioni successive potrebbero arrivare in ritardo, meglio bloccarlo subito.
Ho fatto un po’ di ricerche in rete sul metodo migliore per chiamare un antivirus da codice LotusScript e fargli controllare un file on demand ottenendo in più la riposta in tempo reale ed ecco quello che ho trovato e come ho implementato la soluzione.
Innanzitutto c’è da tenere presente che rendo possibile l’upload utilizzando una normalissima form di Notes dove ho inserito css, html e quant’altro mi serve più il classico pulsante di tipo Submit.
Il submit mi attiva poi l’agent che ho definito nell’evento webQuerySave ed è quest’ultimo che mi svolge tutto il lavoro.
In aggiunta , per meglio definire l’ambiente in cui mi sono mosso, stiamo paralndo di un server Windows con Windows Defender attivo (ma la soluzione antivirus può cambiare , poi vediamo come).
Quello che ho trovato e che sto utilizzando è in sostanza un wrapper che si pone fra LotusScript e l’antivirus usato: potete trovarlo qui , su GitHub .
I file da scaricare sono 2 : AntiVirusScanner.dll ed il batch chiamato Install.as.a.COM.server.bat, dopodichè abbiamo tutto il necessario.
Ricordate che AntiVirusScanner.dll è solo un wrapper, quindi un antivirus come Windows Defender deve essere già presente sul vostro server, altrimenti non funzionerà nulla!
Nei requirements della pagina di Github è specificato come prerequisito Any antivirus applications that support the “IAttachmentExecute” API questo significa che teoricamente qualunque antivirus può essere richiamato a patto che supporti queste specifiche. Io, per il momento, non ho indagato oltre.
Prima però di lanciare il batch per registrare la .dll ci sono 2 modifiche da fare:
il nome del file nel batch è scritto sbagliato e deve essere corretto
Inoltre il batch lancia questo comando:
%windir%\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe AntiVirusScanner.dll /codebase
ma così facendo la registra solo per l’ambiente a 32 bit , mentre Domino è a 64 bit e quindi non la vede.
La soluzione è stata modificare il batch aggiungendo questa riga
%windir%\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe AntiVirusScanner.dll /codebase
in modo che sia disponibile anche per l’ambiente a 64 bit.
A questo punto il più è fatto, basta aggiungere al vostro codice questa Function e poi dal ciclo principale scaricare l’allegato dal documento Notes e lanciarne la verifica con una chiamata del tipo
AVresult = testAV( pathNomefile )
Function testAV(nomefile As String) As Integer Dim resultTxt As String testAV = 99 Set scanner = CreateObject("AntiVirus.Scanner") testAV = scanner.ScanAndClean( nomefile ) Select Case testAV Case 0 Call logevent("AV - Controllato file " + nomefile +" : nessun virus trovato" , 0,Nothing) Case 1 Call logerrorEx("AV - Controllato file " + nomefile +" : FILE INFETTO DA VIRUS" , 2,Nothing) Case 2 Call logerrorEx("AV - Controllato file " + nomefile +" : FILE NON TROVATO" , 1,Nothing) Case Else testAV = 99 Call logerrorEx("AV - Controllato file " + nomefile +" : ERRORE NON PREVISTO" , 1,Nothing) End Select Set scanner = Nothing End Function
0 commenti