Compartir a través de


Consideraciones de seguridad: Controles de Microsoft Windows

En este tema se proporciona información acerca de las consideraciones de seguridad relacionadas con los controles de Windows. La información de este tema no proporciona todo lo que necesita saber acerca de los problemas de seguridad, úselo como punto de partida y referencia para esta área tecnológica.

La interconectividad entre equipos es común; la preocupación principal de un desarrollador debe ser la seguridad de las aplicaciones. En las secciones siguientes se describen algunos posibles problemas de seguridad que se deben tener en cuenta al programar controles de Windows.

Mensajes de control terminados en NULL

Muchos de los mensajes y macros de control tienen parámetros de cadena. Frecuentemente, estos mensajes no validan las cadenas de entrada, en particular, no comprueban si hay una terminación '\0'. Cuando se llama a un mensaje que usa una cadena como parámetro, especifique explícitamente que la cadena está terminada en null.

Uso de cadenas

Al programar controles de Windows, es necesario manipular cadenas. Casi todos los controles requieren que se inserte texto. Por ejemplo, para rellenar un cuadro de lista, debe cargar cadenas en el control. Dado que el uso de cadenas a menudo provoca saturaciones de búfer, tome precauciones para evitar este riesgo de seguridad.

Para más información acerca de las saturaciones de búfer, consulte Escritura de código seguro por Michael Howard y David LeBlanc, Microsoft Press, 2002 y Procedimientos recomendados para las API de seguridad.

Validación de entrada

Los siguientes mensajes de control pueden presentar problemas de seguridad.

Si el texto cambia entre la llamada para obtener la longitud del texto y el tiempo en que se muestra o se usa el texto, se puede producir una saturación del búfer. Para evitar esto, debe validar la cadena antes de usarla. Además, los mensajes que recuperan texto, CB_GETLBTEXT, TB_GETBUTTONTEXT, y TTM_GETTEXT, no tienen ningún parámetro de tamaño de búfer que presente la posibilidad de que se supere un búfer.

Al usar CB_GETLBTEXT o SB_GETTEXT, primero debe llamar a CB_GETLBTEXTLEN o SB_GETTEXTLENGTH para obtener el tamaño del búfer. Algunos de estos mensajes, TB_GETBUTTONTEXT, LVM_GETISEARCHSTRINGy TVM_GETISEARCHSTRING, se pueden llamar con un valor de parámetro NULL para obtener la longitud de la cadena antes de invocar el mensaje para recuperar la cadena.

Un mensaje al que debe prestar especial atención es la barra de estado SB_GETTIPTEXT mensaje. Este mensaje no proporciona ninguna manera de consultar la longitud de la cadena que se va a recuperar.

Uso de contraseñas

Si usa controles de edición protegidos con contraseña (ES_PASSWORD estilo), el búfer que contiene el texto recuperado debe establecerse en cero lo antes posible para evitar exponer la contraseña del usuario en memoria.

Alertas de seguridad

En la tabla siguiente se enumeran las características que, si se usan incorrectamente, pueden poner en peligro la seguridad de las aplicaciones. Los mensajes enumerados aquí no proporcionan un parámetro que especifique el tamaño del búfer.

Característica Mitigación
DlgDirListComboBox Asegúrese de que el búfer usado por la función se puede escribir en y que está terminado en null.
CB_GETLBTEXT Llame a CB_GETLBTEXTLEN para obtener el tamaño del búfer y a continuación, llame aCB_GETLBTEXT para recuperar la cadena.
LVM_GETISEARCHSTRING Llame al mensaje con un valor de parámetro NULL para obtener el tamaño del búfer y a continuación, llame al mensaje una segunda vez para recuperar la cadena.
SB_GETTEXT Llame a SB_GETTEXTLENGTH para obtener el tamaño del búfer y a continuación, llame aSB_GETTEXT para recuperar la cadena.
TB_GETBUTTONTEXT Llame al mensaje con un valor de parámetro NULL para obtener el tamaño del búfer y a continuación, llame al mensaje una segunda vez para recuperar la cadena.
TTM_GETTEXT Este mensaje no proporciona una manera de saber o especificar el tamaño del búfer.
TVM_GETISEARCHSTRING Llame al mensaje pasando un valor de parámetro NULL para obtener el tamaño del búfer y a continuación, llame al mensaje una segunda vez para recuperar la cadena.

 

Otros recursos

Seguridad de Microsoft

Seguridad

Centro de respuestas de seguridad de Microsoft

Procedimientos recomendados para las API de seguridad