FileSwift — compartilhe arquivos na rede local usando apenas o navegador

Fico muito feliz quando vejo um projeto despertar tanto interesse e as pessoas começarem a contribuir. Esse é o verdadeiro espírito do software livre.

Parabéns! :clap: :clap: :clap:

1 curtida

@pixelcatBR, já fiz o merge do PR — a nova interface agora faz parte do FileSwift. Muito obrigado!

Tamo junto! :rocket:

kyqyk, Obrigado por fazer o ajuste tão rápido.

Já fiz o merge do PR, então o suporte a Docker agora faz parte do FileSwift.

Pode continuar mandando sugestões e considerações, serão sempre bem-vindas!

Tamo junto! :rocket:.

Se ele for dockerizado é possível colocar ele como app no umbrel? Atualmente estou testando o umbrel como servidor de homelab

1 curtida

Como está dockerizado funcionaria assim, bastaria clonar o repo e usar o compose. O ponto aqui é que não está na loja oficial de apps, poderia ser uma futura feature.

1 curtida

Massa! Vou pesquisar aqui como faz. Nunca usei o Umbrel. A ideia de vcs é fazer o Fileswift ter um botão de “clicar e instalar” no loja do Umbrel, é isso?

@HyMathDireito

Para instalar no Umbrel, mesmo não estando na loja, é só usar o Portainer, que está na loja. :wink:

Uso o Umbrel aqui e faço dessa forma .

1 curtida

Parabéns pelo trabalho @Bruno_Fragoso_de_Alm, dei uma olhadinha por cima no código e acho que dava para melhorar um pouco a segurança.

Não vi nenhuma validação para garantir que o cliente está confinado ao MEDIA_FOLDER. Alguém poderia via path traversal na prática deletar qualquer coisa, por exemplo ../../../../home/nome-de-usuário/Documentos. Achei meio abrangente demais.

Por exemplo, a pasta não é sanitizada em upload, poderia inclusive se aproveitar disso para injetar coisas: /upload/../../../../home/nome-de-usuário/.config

2 curtidas

Boa, romulopb! Agradeço muito o seu comentário! Você fez uma observação muito importante. Era uma vulnerabilidade real de path traversal em várias rotas (upload, apagar, mover, etc). Antes, o código só fazia:

caminho_pasta = os.path.join(MEDIA_FOLDER, pasta)
sem checar se pasta continha algo como ../../../home/usuario. Corrigi criando uma função que resolve o caminho e garante que ele não escapa do MEDIA_FOLDER:

def resolver_caminho_seguro(caminho_relativo, base=None):
if base is None:
base = MEDIA_FOLDER
base_real = os.path.realpath(base)
caminho_resolvido = os.path.realpath(os.path.join(base, caminho_relativo or ‘’))
if caminho_resolvido != base_real and not caminho_resolvido.startswith(base_real + os.sep):
return None
return caminho_resolvido
Apliquei em todas as rotas que mexem com arquivo/pasta.

2 curtidas

Que bom que conseguiu resolver!

Uma dica que eu daria é para começar a fazer testes automatizados. Como é uma ferramenta meio sensivel no sentido de segurança, acho importante.

Vou dar mais uma olhadinha para ver se acho algo mais, quem sabe contribuir algo nesse sentido de CI / CD, se estiver interessado.

2 curtidas

Por favor! Toda ajuda será muito bem-vinda! :raising_hands:

Aproveitando, também corrigi um bug que fazia a seção “Atividade do Servidor” ficar sempre zerada.

Outra novidade é uma tela de Configurações para quem usa o FileSwift em mais de um PC na mesma rede. Agora cada instância pode ter seu próprio endereço mDNS (por exemplo, sala.local e escritorio.local), evitando o conflito que existia quando todas anunciavam fs.local.

1 curtida

Pessoal, passando para compartilhar uma série de melhorias que chegaram ao FileSwift.

:locked: Segurança: o @RomuloPBenedetti reportou uma vulnerabilidade de path traversal. Ela já foi corrigida e agora conta com testes automatizados para evitar regressões. Também adicionei proteção contra CSRF em todas as ações que alteram dados.

:test_tube: Testes automatizados e CI: graças à contribuição do @RomuloPBenedetti, o projeto agora possui uma suíte de testes executada automaticamente a cada push e pull request em Linux e Windows. Além disso, a branch principal está protegida: nenhum PR pode ser mesclado se os testes não passarem.

:gear: Mais robustez: substituí o servidor de desenvolvimento pelo Waitress, um servidor WSGI voltado para produção. As estatísticas de acesso agora sobrevivem a reinicializações e o projeto passou a contar com logs persistentes, facilitando o diagnóstico de problemas.

:bar_chart: Estatísticas mais precisas: a tela Atividade do Servidor foi revisada para representar melhor o uso real, evitando contagens infladas causadas pelas atualizações automáticas da interface.

:page_facing_up: Para quem quiser contribuir: o projeto agora possui um CONTRIBUTING.md com instruções de configuração, padrões de desenvolvimento e fluxo de contribuição. Já recebemos contribuições de três pessoas da comunidade e novas contribuições são muito bem-vindas.

Obrigado a todos que usam o FileSwift, enviam sugestões, reportam problemas ou contribuem com código. Cada melhoria dessas ajuda o projeto a ficar mais sólido. :folded_hands:

3 curtidas