Compartilhar via


Considerações de segurança: Controles do Microsoft Windows

Este tópico fornece informações sobre considerações de segurança relacionadas aos controles do Windows. As informações neste tópico não fornecem tudo o que você precisa saber sobre problemas de segurança: use-as como ponto de partida e referência para essa área de tecnologia.

A interconectividade entre computadores é comum; A principal preocupação de um desenvolvedor deve ser a segurança do aplicativo. As seções a seguir discutem alguns possíveis problemas de segurança a serem considerados ao programar controles do Windows.

Mensagens de controle terminadas em nulo

Muitas das mensagens de controle e macros têm parâmetros de cadeia de caracteres. Geralmente, essas mensagens não validam as cadeias de caracteres de entrada, em particular, elas não verificam se há uma '\0'de terminação. Quando você chama uma mensagem que usa uma cadeia de caracteres como parâmetro, especifique explicitamente que a cadeia de caracteres é terminada em nulo.

Uso de cadeia de caracteres

Quando você programa controles do Windows, é necessário manipular cadeias de caracteres. Quase todos os controles exigem que o texto seja inserido. Por exemplo, para preencher uma caixa de listagem, você deve carregar cadeias de caracteres no controle. Como usar cadeias de caracteres incorretamente geralmente causa sobrecargas de buffer, tome precauções para evitar esse risco de segurança.

Para obter mais informações sobre sobrecargas de buffer, consulte Escrevendo de Código Seguro por Michael Howard e David LeBlanc, Microsoft Press, 2002 e Práticas Recomendadas para as APIs de Segurança.

Validação de entrada

As mensagens de controle a seguir podem apresentar problemas de segurança.

Se o texto for alterado entre a chamada para obter o comprimento do texto e o tempo em que o texto é exibido ou usado, pode ocorrer uma sobrecarga de buffer. Para evitar isso, você deve validar a cadeia de caracteres antes de usá-la. Além disso, as mensagens que recuperam texto, CB_GETLBTEXT, TB_GETBUTTONTEXTe TTM_GETTEXT, não têm nenhum parâmetro de tamanho de buffer que apresente o potencial de uma sobrecarga de buffer.

Ao usar CB_GETLBTEXT ou SB_GETTEXT, você deve primeiro chamar CB_GETLBTEXTLEN ou SB_GETTEXTLENGTH para obter o tamanho do buffer. Algumas dessas mensagens, TB_GETBUTTONTEXT, LVM_GETISEARCHSTRINGe TVM_GETISEARCHSTRING, podem ser chamadas com um valor de parâmetro NULL para obter o comprimento da cadeia de caracteres antes de invocar a mensagem para recuperar a cadeia de caracteres.

Uma mensagem à qual você deve prestar atenção é a barra de status SB_GETTIPTEXT mensagem. Esta mensagem não fornece nenhuma maneira de consultar o comprimento da cadeia de caracteres que deve ser recuperada.

Uso de senha

Se você usar controles de edição protegidos por senha (estiloES_PASSWORD), o buffer que contém o texto recuperado deverá ser definido como zero o mais rápido possível para evitar expor a senha do usuário na memória.

Alertas de segurança

A tabela a seguir lista os recursos que, se usados incorretamente, podem comprometer a segurança de seus aplicativos. As mensagens listadas aqui não fornecem um parâmetro que especifica o tamanho do buffer.

Característica Mitigação
DlgDirListComboBox Verifique se o buffer usado pela função pode ser gravado e encerrado em nulo.
CB_GETLBTEXT Chame CB_GETLBTEXTLEN para obter o tamanho do buffer e, em seguida, chame CB_GETLBTEXT para recuperar a cadeia de caracteres.
LVM_GETISEARCHSTRING Chame a mensagem com um valor de parâmetro NULL para obter o tamanho do buffer e, em seguida, chame a mensagem uma segunda vez para recuperar a cadeia de caracteres.
SB_GETTEXT Chame SB_GETTEXTLENGTH para obter o tamanho do buffer e, em seguida, chame SB_GETTEXT para recuperar a cadeia de caracteres.
TB_GETBUTTONTEXT Chame a mensagem com um valor de parâmetro NULL para obter o tamanho do buffer e, em seguida, chame a mensagem uma segunda vez para recuperar a cadeia de caracteres.
TTM_GETTEXT Essa mensagem não fornece uma maneira de você saber ou especificar o tamanho do buffer.
TVM_GETISEARCHSTRING Chame a mensagem passando uma valor de parâmetro NULL para obter o tamanho do buffer e, em seguida, chame a mensagem uma segunda vez para recuperar a cadeia de caracteres.

 

outros recursos

de Segurança da Microsoft

de Segurança do

do Centro de Resposta de Segurança da Microsoft

práticas recomendadas para as APIs de segurança