Uso de API seguras en Windows

Programando en C o C++ una de los aspectos que hay que tener en cuenta es el producir código que sea seguro. El enemigo público número uno es el buffer overflow. Ya es relativamente sencillo introducir buffer overflows por uno mismo, pero además hay que cuidar que las funciones que se utilizan son seguras y no pueden ser atacadas. Un ejemplo que resalta es strcpy.

 Para mejorar la calidad del código, en MSDN se enumeran las APIs prohibidas. En general, se deben usar funciones StringXxx* (por ejemplo StringCchCat o StringCbCat) en vez de funciones str* (como strcat). 

 Pero recuerda que, de todas formas, uno nunca debe ponerse en la boca lo primero que encuentra: Cch significa CharacterCount y Cb ByteCount. Como Larry Osterman apunta, el momento que usemos las funciones Cch con arrays de tipo TCHAR y se defina Unicode (algo lógico si usamos TCHAR), entonces introduciriamos un agujero de seguridad.

Así

HRESULT Function (TCHAR *s1, TCHAR *s2)
{
   TCHAR temp[32];
   HRESULT hr = StringCchCopy(temp,sizeof(temp),s1);
   if (FAILED(hr)) return hr;
   return StringCchCat(temp,sizeof(temp),s2);
}

sería peligroso en el momento que alguien definiera UNICODE = 1. Para solucionarlo deberíamos utlizar:

HRESULT Function (char *s1, char *s2)
{
   char temp[32];
   HRESULT hr = StringCbCopy(temp,sizeof(temp),s1);
   if (FAILED(hr)) return hr;
   return StringCbCat(temp,sizeof(temp),s2);
}

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: