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. Muitas vezes, essas mensagens não validam as cadeias de caracteres de entrada, em particular, elas não verificam se há um '\0'de terminação. Quando você chamar 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 o uso incorreto de cadeias de caracteres geralmente causa saturações de buffer, tome precauções para evitar esse risco de segurança.

Para obter mais informações sobre saturações de buffer, consulte Writing Secure Code de Michael Howard e David LeBlanc, Microsoft Press, 2002 e Best Practices for the Security APIs.

Validação de entrada

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

Se o texto for alterado entre a chamada para obter o comprimento do texto e a hora em que o texto é exibido ou usado, pode ocorrer uma saturação do 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 saturação de buffer.

Quando você usa 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 recuperá-la.

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

Utilização da palavra-passe

Se você usar controles de edição protegidos por senha (estiloES_PASSWORD), o buffer que contém o texto recuperado deve ser definido como zero o mais rápido possível para evitar a exposição da 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.

Funcionalidade Atenuação
DlgDirListComboBox Verifique se o buffer usado pela função pode ser gravado e é terminado 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 NULL valor de parâmetro 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 NULL valor de parâmetro para obter o tamanho do buffer e, em seguida, chame a mensagem uma segunda vez para recuperar a cadeia de caracteres.
TTM_GETTEXT Esta mensagem não fornece uma maneira de saber ou especificar o tamanho do buffer.
TVM_GETISEARCHSTRING Chame a mensagem passando 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.

 

Outros recursos

de Segurança da Microsoft

Segurança

do Microsoft Security Response Center

práticas recomendadas para as APIs de segurança