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 nulas
- String Use
- de validação de entrada
- Uso de senha
- Alertas de Segurança
- Tópicos relacionados
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.
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.
As seguintes mensagens de controle podem apresentar problemas de segurança.
- CB_GETLBTEXT
- LVM_GETISEARCHSTRING
- SB_GETTEXT
- SB_GETTIPTEXT
- TB_GETBUTTONTEXT
- TTM_GETTEXT
- TVM_GETISEARCHSTRING
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.
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.
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