Segurança e entrada do usuário

Os dados do usuário, que são qualquer tipo de entrada (dados de uma solicitação da Web ou URL, entrada para controles de um aplicativo do Windows Forms e assim por diante), podem influenciar negativamente o código, pois muitas vezes esses dados são usados diretamente como parâmetros para chamar outro código. Essa situação é análoga ao código mal-intencionado que chama seu código com parâmetros estranhos e as mesmas precauções devem ser tomadas. Na verdade, a entrada de usuário é mais difícil de tornar segura porque não há nenhum registro de ativação para rastrear a presença dos dados potencialmente não confiáveis.

Eles estão entre os bugs de segurança mais sutis e difíceis de encontrar, porque embora possam existir em um código aparentemente não relacionado à segurança, eles são um gateway para passar dados incorretos para outro código. Para procurar esses bugs, siga qualquer tipo de dados de entrada, imagine qual é o intervalo de valores possíveis e considere se o código que vê esses dados pode lidar com todos esses casos. Você pode corrigir esses bugs por meio da verificação de intervalo e da rejeição de qualquer entrada que o código não possa manipular.

Algumas considerações importantes envolvendo dados do usuário são as seguintes:

  • Todos os dados de usuário em uma resposta de servidor são executados no contexto do site do servidor no cliente. Se o servidor Web pegar os dados do usuário e inseri-los na página da Web retornada, ele poderá, por exemplo, incluir uma tag de <script> e executar como se fosse do servidor.

  • Lembre-se de que o cliente pode solicitar qualquer URL.

  • Considere caminhos complicados ou inválidos:

    • ..\ , caminhos extremamente longos.

    • Uso de caracteres curinga (*).

    • Expansão de token (%token%).

    • Formas estranhas de caminhos com significado especial.

    • Nomes alternativos de fluxo do sistema de arquivos, como filename::$DATA.

    • Versões curtas de nomes de arquivo, como longfi~1 para longfilename.

  • Lembre-se de que Eval(userdata) pode fazer qualquer coisa.

  • Tenha cuidado com a associação tardia a um nome que inclui alguns dados do usuário.

  • Se você estiver lidando com dados da Web, considere as várias formas de escape que são permitidas, incluindo:

    • Escapes hexadecimais (%nn).

    • Escapes Unicode (%nnn).

    • Escapes UTF-8 ao longo do tempo (%nn%nn).

    • Escapes duplos (%nn torna-se %mmnn, onde %mm é o escape para '%').

  • Tenha cuidado com nomes de usuário que podem ter mais de uma forma canônica. Por exemplo, muitas vezes você pode usar o formulário MYDOMAIN\username ou o formulário username@mydomain.exemplo.com.

Confira também