Partilhar via


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.

Consulte também

Conceitos

Diretrizes para Codificação Segura