Validação de caminhos
Objetivo
Documentar os cuidados necessários para resolver caminhos de documentos e recursos sem permitir acesso a arquivos fora da área autorizada.
Contexto
O krameldocs recebe caminhos derivados da navegação e de solicitações de recursos. Esses caminhos precisam ser interpretados de forma consistente com o diretório-base configurado.
A variável DOCS_GIT_PATH pode definir um diretório-base para o conteúdo. Quando estiver vazia, utiliza-se a raiz do repositório.
Riscos
Uma validação inadequada pode permitir:
- Tentativas de sair do diretório de conteúdo.
- Acesso a recursos não autorizados.
- Referências malformadas ou ambíguas.
- Erros causados por diferenças de normalização entre sistemas.
- Solicitações de arquivos que não deveriam ser disponibilizados.
Regras de validação
Ao alterar a lógica de resolução de caminhos:
- Rejeite caminhos que tentem atravessar diretórios, como entradas com
... - Normalize os caminhos antes de utilizá-los.
- Restrinja a resolução ao diretório-base permitido.
- Valide os segmentos recebidos pela rota.
- Não confie exclusivamente na validação realizada pelo navegador.
- Trate caminhos inexistentes ou inválidos sem revelar detalhes internos.
- Aplique as restrições também aos recursos, não apenas às páginas Markdown.
Nomes e capitalização
Mantenha os caminhos consistentes com os nomes reais dos arquivos.
A capitalização pode afetar o resultado, especialmente em ambientes de implantação que diferenciam letras maiúsculas e minúsculas.
Exemplo:
assets/arquitetura.png
Não presuma que Assets/Arquitetura.png identifica o mesmo arquivo em todos os ambientes.
Diretório-base
Quando DOCS_GIT_PATH estiver configurado, confirme que documentos e recursos são resolvidos em relação à base pretendida.
Evite combinar caminhos já prefixados com o diretório-base de forma que o prefixo seja aplicado duas vezes.
Testes recomendados
Inclua testes para:
- Caminhos válidos.
- Arquivos inexistentes.
- Caminhos vazios ou malformados.
- Tentativas de utilizar
... - Segmentos com caracteres codificados.
- Nomes com espaços ou caracteres acentuados, quando suportados.
- Recursos localizados em subdiretórios.
- Caminhos incompatíveis com o diretório-base.
Tratamento de erros
Uma solicitação inválida deve resultar em uma resposta de erro apropriada, sem fornecer informações desnecessárias sobre a estrutura interna da aplicação ou credenciais.
O status HTTP exato deve seguir o contrato implementado pela rota.
Manutenção
Toda mudança na resolução de caminhos deve ser acompanhada de testes de regressão e revisão de segurança.