Princípios
- Você decide: cada recebimento passa por aprovação, a não ser que você escolha o contrário.
- Conteúdo fora do servidor: arquivos e textos vão direto entre os aparelhos; o servidor não os recebe.
- Mínimo de dados: sem contas e sem análise de uso (veja Privacidade).
- Transparência: distinguir o que existe do que ainda é projeto.
O que existe hoje
| Medida | Situação | Detalhe |
|---|---|---|
| Criptografia da conexão direta | Implementada | O canal entre os navegadores é WebRTC com DTLS. Isso vale também quando o tráfego passa por um servidor de retransmissão (TURN). |
| Conteúdo não passa pelo servidor | Implementada | O servidor só repassa a sinalização; não recebe, não guarda e não registra arquivos nem textos. |
| Aprovação de cada pedido de recebimento | Implementada | Aceitar, recusar, pular e renomear. Aparelhos ocultos recusam pedidos. |
| PIN do destinatário | Implementada | O destino confere o PIN; três erros bloqueiam novas tentativas por 1 minuto. O PIN fica salvo sem criptografia no navegador do destino. |
| Pareamento por código, sem servidor | Implementada | O código leva a impressão digital da conexão de cada ponta, então a conexão só se completa com o aparelho que gerou o código. Não há servidor no meio. Cada convite vale para uma ligação. |
| Salas com código secreto | Implementada | Só aparelhos com o mesmo código se veem e trocam sinalização. Os códigos gerados têm 6 caracteres aleatórios no serviço da Cloudflare (fáceis de digitar) e 10 no servidor próprio. O serviço também limita cada sala a 20 aparelhos e só aceita o site do ERASÓ como origem. |
| Autenticação de cada aparelho no servidor | Implementada | Cada conexão recebe um token aleatório; sem ele, não é possível sinalizar em nome de outro aparelho nem alterar o nome ou a visibilidade dele. |
| Limites contra abuso no servidor | Implementada | Limite de requisições por minuto e de conexões por IP, de aparelhos por sala e de tamanho das mensagens. |
| Proteções do navegador | Implementada | Política de segurança de conteúdo, nosniff, restrição de quem pode embutir o site e HTTPS obrigatório (HSTS) no servidor público. O servidor publica apenas o site e o aplicativo. |
| Conteúdo hostil vindo de outro aparelho | Testado | Nomes, textos e arquivos com HTML ou JavaScript são exibidos como texto, sem executar nada (teste automático). |
| Conferência de integridade (CRC32) | Parcial | Detecta arquivo incompleto ou corrompido. Não é uma proteção contra adulteração intencional. |
| Verificação de identidade do outro aparelho | Não implementada | O servidor é confiável para a sinalização: um servidor malicioso poderia, em tese, intermediar a conexão. A comparação das impressões digitais da conexão nos dois aparelhos é viável, mas não foi feita. |
| Contas e identidade permanente de aparelhos | Não existe | Não há contas. A identidade do aparelho é um número aleatório guardado no navegador. |
| Auditoria de segurança independente | Não realizada | Os testes automáticos cobrem o servidor, a rede e a interface, mas não substituem uma auditoria. |
O que acontece no seu navegador
- Preferências, histórico e Caixa ficam no armazenamento do navegador, neste aparelho (veja Privacidade).
- Arquivos recebidos ficam na memória até a transferência terminar e são salvos pelo navegador; o limite é de 2 GB por pedido.
- A área de transferência só é lida ou escrita quando você aciona “Colar” ou “Copiar”.
- Câmera, microfone, localização e notificações não são usados.
- Nenhum script de terceiros é carregado; a única requisição externa do site e do aplicativo é a de fontes do Google Fonts. Em servidor público, o navegador também consulta um servidor STUN.
Boas práticas de uso
- No pareamento, mostre o QR Code pessoalmente ou envie o código por um canal de confiança. Quem interceptar o convite pode tentar responder antes da pessoa certa; se algo parecer estranho, cancele e gere outro.
- Aceite apenas o que você reconhece. Desconfie de pedidos de aparelhos que você não conhece.
- Use o código de sala gerado pelo aplicativo (10 caracteres aleatórios), não uma palavra fácil de adivinhar, e crie um novo para cada grupo.
- Em redes públicas ou compartilhadas (laboratório, biblioteca, Wi-Fi da escola), use PIN e mantenha o recebimento automático em “sempre perguntar”.
- Não compartilhe o PIN nem o código da sala fora de quem deve usá-los.
- Se alguém na sala enviar pedidos indesejados, recuse, saia da sala e crie uma nova.
- Mantenha o navegador atualizado.
Limitações conhecidas
| Limitação | Efeito |
|---|---|
| Convite visto por terceiros | No pareamento, o código é o convite: quem o obtiver antes do destinatário pode responder primeiro. Ele só vale para uma ligação e o outro lado vê o nome do aparelho que respondeu. Cada recebimento ainda exige a sua aprovação. |
| Servidor confiável para sinalização | Quem controla o servidor pode ver quem está online e tentar intermediar uma conexão nova. Não consegue ler conexões que ele não intermediou. |
| Quem tem o código da sala entra nela | Vê nomes e tipos dos aparelhos e pode enviar pedidos. Cada recebimento ainda exige a sua aprovação e o PIN, se ativado. O código de 6 letras evita encontros por acaso, mas não resiste a quem tente adivinhar; para mais segurança, use o pareamento por QR Code. |
| Aparelhos do mesmo Wi-Fi aparecem sozinhos | Qualquer aparelho que saia para a internet pelo mesmo endereço (por exemplo, a rede de uma instituição) pode ver o nome do seu aparelho e pedir um envio. O serviço limita a 20 aparelhos e o aplicativo oferece salas; você pode usar o pareamento por QR Code ou recusar pedidos. |
| Endereços de rede visíveis para o outro aparelho | Como em qualquer conexão direta, o aparelho de destino recebe os endereços de rede usados na conexão. |
| Sem bloqueio de remetentes | Não há lista de bloqueio; a saída é recusar e trocar de sala. |
| Retomada de transferências interrompidas | Não existe: uma transferência que cai precisa ser refeita. |
Os testes de segurança do servidor e o relatório da etapa de validação acompanham o código-fonte (veja Código-fonte e GitHub).
Como relatar uma falha de segurança
Canal para relatos: [a definir]. Enquanto isso, use Contato e não publique detalhes da falha antes de a equipe responder.
Ajuda muito informar: o que você fez, o que esperava, o que aconteceu, navegador e sistema, e capturas de tela sem dados pessoais. Prazo de resposta e política de divulgação: [a definir].