Repository navigation
uploads antivirus
Home > Segurança para produção > Antivírus em uploads 🚧
Important
Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.
Vale para a 2.0 · Nível: intermediário
Em uma frase: o TRALUploadScanPlugin passa cada arquivo enviado por um scanner
(TRALClamAVScanner, que fala com o clamd) antes de qualquer rota rodar; nada do
arquivo é gravado.
Você vai precisar: RALModuleWebPackage (requer RALNetPackage) e um clamd acessível por TCP.
sudo apt install clamav-daemon
# /etc/clamav/clamd.conf:
TCPSocket 3310
TCPAddr 127.0.0.1
sudo systemctl restart clamav-daemon
Teste: um arquivo de texto com a cadeia EICAR (a assinatura de teste padrão, publicada em eicar.org) deve ser recusado. Não exponha a porta 3310 fora da máquina/rede interna.
uses RALUploadScan, RALClamAV;
Clam := TRALClamAVScanner.Create(Self);
Clam.Host := '127.0.0.1';
if not Clam.Ping then raise Exception.Create('clamd fora do ar');
Scan := TRALUploadScanPlugin.Create(Self);
Scan.Server := Servidor;
Scan.Scanner := Clam;
Scan.ScanFailAction := sfaReject;
Scan.OnScanUpload := {$IFDEF FPC}@{$ENDIF}ConferirUpload;
procedure TForm1.ConferirUpload(Sender: TObject; ARequest: TRALRequest;
AParam: TRALParam; var AVerdict: TRALUploadVerdict; var AThreat: StringRAL);
begin
// opcional: segunda opinião, ou mudar o veredito
end;| propriedade | padrão | |
|---|---|---|
Scanner |
nil | quem examina; nil deixa a decisão ao OnScanUpload
|
OnScanUpload |
por arquivo, depois do scanner; pode trocar AVerdict
|
|
ScanFailAction |
sfaReject |
arquivo que não pôde ser examinado: sfaReject responde 503 com Retry-After: 30; sfaAccept deixa passar |
ScanBody |
False |
examina também o corpo inteiro cru (um PUT de arquivo) |
TRALClamAVScanner.Host / Port
|
— / 3310 | endereço do clamd |
Timeout |
30000 | ms para conectar e a cada etapa |
ChunkSize |
65536 | bytes por pedaço do INSTREAM
|
Métodos do scanner: Ping (True se o clamd responde PONG) e Version. Vereditos:
uvClean, uvInfected (422), uvError (ver ScanFailAction). Prioridade 450, fase
ppProcess: depois da autenticação, então pedido recusado nem é examinado.
| o que acontece | causa | o que fazer |
|---|---|---|
| 503 em todo upload | clamd parado ou porta errada |
Ping; ou sfaAccept se aceita o risco |
| arquivo grande recusado pelo clamd |
StreamMaxLength do clamd.conf |
aumente lá |
| PUT cru passa sem exame |
ScanBody desligado |
ligue |
| conexão recusada |
TCPSocket não configurado |
veja acima |
Scanners próprios herdam de TRALUploadScanner (método Scan, thread-safe).
Começar
Servidor
- Rotas e parâmetros
- Rotas avançadas: tipos, grupos, versões 🚧
- Ler o pedido e responder
- Objetos no corpo 🚧
- Resposta em fluxo 🚧
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- JSON-RPC 2.0 🚧
- Servidor MCP (IA) 🚧
-
Protocol Buffers 🚧
- gRPC 🚧
- WebSocket 🚧
- Hubs (WebSocket) 🚧
- Swagger e Postman
- Servidor SOAP 🚧
- WS-Security 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
- Testes em memória 🚧
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
Cliente
Motores
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar