Segurança e a entrada do usuário
Os dados do usuário, que é qualquer tipo de entrada (dados de uma solicitação da Web ou URL, a entrada para controles de um aplicativo do Microsoft Windows Forms e assim por diante), negativamente pode influenciar o código porque geralmente usados diretamente como parâmetros para chamar outro código. Essa situação é análoga ao código mal intencionado chame seu código com estranhos parâmetros e as mesmas precauções que devem ser seguidas. Entrada do usuário é realmente difícil tornar seguro porque não há nenhum quadro de pilha para rastrear a presença dos dados potencialmente não confiáveis.
Eles estão entre os bugs de segurança mais sutil e mais difícil encontrar porque, embora eles podem existir em código que é aparentemente não relacionado à segurança, eles são um gateway para passar dados inválidos através de outro código. Para procurar esses bugs, siga qualquer tipo de dados de entrada, imagine o que o intervalo de valores possíveis possam ser e considerar se o código vendo esses dados pode manipular todos os casos. Você pode corrigir esses erros por meio do intervalo de verificação e rejeitar qualquer entrada que o código não pode manipular.
Algumas considerações importantes envolvendo dados de usuário incluem o seguinte:
Os dados do usuário em uma resposta do servidor é executado no contexto do site do servidor no cliente. Se seu servidor Web retira os dados de usuário e insere a página da Web retornada, ele pode, por exemplo, incluir uma <script> de marca e executados como se do servidor.
Lembre-se de que o cliente pode solicitar qualquer URL.
Considere os caminhos complicados ou inválidos:
.. \, caminhos extremamente longos.
Uso de caracteres curinga (*).
Expansão de token (% % de token).
Estranhos formulários de caminhos com significado especial.
Alternativas de nomes de fluxo de sistema de arquivos, como filename::$DATA.
Curto versões dos nomes de arquivo como longfi~1 para longfilename.
Lembre-se de que o Eval(userdata) pode fazer qualquer coisa.
Desconfie de ligação atrasada a um nome que inclui alguns dados do usuário.
Se você estiver lidando com dados da Web, considere as diversas formas de escapa é permitidas, incluindo:
Escapa de hexadecimal (% nn).
Sai do Unicode (% nnn).
Escapa extensa de UTF-8 (% nn % nn).
Escapa dupla (% nn se torna % mmnn, onde % mm é o escape para '%').
Desconfie de nomes de usuário podem ter mais de um formato canônico. Por exemplo, no Microsoft Windows 2000, você pode normalmente usar tanto o MYDOMAIN\nome de usuário formulário ou o nome de usuário@mydomain.example.com formulário.