Pergunta

Estou analisando meu código (C#, aplicativo de desktop) com CAT.NET Code Analysis e recebendo a mensagem "Sanitizar o caminho do arquivo antes de passá-lo para as rotinas do sistema de arquivos" ao lidar com nomes de arquivos.O que não entendo é que para garantir que o nome do arquivo seja válido, eu uso:

void SomeMethod(String filename)
{
    filename = System.IO.Path.GetFullPath(filename);
    // ... Do stuff
}

Não é uma "solução mágica" para resolver problemas com nomes de arquivos inválidos?eu li algo parecido aqui (primeira resposta), mas no meu caso estou lidando apenas com arquivos locais, bom, algo bem básico, então...

Então, por que estou recebendo esta mensagem e como fazer para evitá-la?

Foi útil?

Solução

Sei que esta é uma pergunta antiga, mas acabei de encontrar algo que pode ser útil especificamente relacionado à mensagem de erro CAT.Net.

Em um postagem no blog sobre as regras de fluxo de dados CAT.Net, eles têm isso a dizer sobre o FileCanonicalizationRule:

Descrição

A entrada do usuário usada nas rotinas de manuseio de arquivos pode potencialmente levar à vulnerabilidade de canonicalização do arquivo.O código é particularmente suscetível a problemas de canonização se tomar alguma decisão com base no nome de um recurso que é passado para o programa como entrada.Arquivos, caminhos e URLs são tipos de recursos vulneráveis ​​à canonalização, porque em cada caso existem muitas maneiras diferentes de representar o mesmo nome.

Resolução

Limpe o caminho do arquivo antes de passá-lo para rotinas de manipulação de arquivos.Use path.getInValidFilenameChars ou Path.getInValidPathchars Para obter os caracteres inválidos e removê -los da entrada.Mais informações podem ser encontradas em http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidfilenamechars.aspx.

Então, eles sugerem que você use Path.GetInvalidFileNameChars e Path.GetInvalidPathChars para validar seus caminhos.

Observe que a sugestão deles é remover os caracteres inválidos.Embora isso realmente torne o caminho válido, pode causar um comportamento inesperado para o usuário.Como os comentários sobre esse pergunta/resposta sugere que provavelmente é melhor sair mais cedo e dizer ao usuário que seu caminho é inválido, em vez de fazer algo inesperado com sua entrada (como remover caracteres inválidos e usar a versão modificada).

Outras dicas

Se o nome do arquivo vier de um usuário, pode ser algo como "../../../../etc/passwd" - a mensagem de erro está dizendo que você precisa para higienizar para que não consiga obter para os diretórios não deve.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top