|
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
|
Traducción
Original
|
/GS (Comprobación de seguridad del búfer)
/GS[-]
Comprobaciones de seguridad
Búferes GS
-
Matriz que tiene más de 4 bytes, tiene más de dos elementos y tiene un elemento que no es de tipo de puntero. -
Una estructura de datos cuyo tamaño es más de 8 bytes y no contiene punteros. -
Un búfer asignado mediante la función _alloca. -
Cualquier clase o estructura que contiene un búfer GS.
char buffer[20];
int buffer[20];
struct { int a; int b; int c; int d; } myStruct;
struct { int a; char buf[20]; };
char *pBuf[20];
void *pv[20];
char buf[4];
int buf[2];
struct { int a; int b; };
Inicializar la cookie de seguridad
Lo que está protegido
-
Dirección de devolución de una llamada de función. -
La dirección de un controlador de excepciones para una función. -
Parámetros de función vulnerables.
-
Funciones que no contienen un búfer GS. -
No se habilitan las optimizaciones (opciones /O). -
Funciones que tienen una lista de argumentos variable (...). -
Funciones que se marcan con naked. -
Funciones que contienen código de ensamblado alineado en la primera instrucción. -
Un parámetro sólo se utiliza de manera que sea poco probable que se pueda usar de forma malintencionada en caso de una saturación del búfer.
Lo que no está protegido
Para establecer esta opción del compilador en Visual Studio
-
En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto y, a continuación, seleccione Propiedades. Para obtener más información, vea Cómo: Abrir páginas de propiedades del proyecto. -
En el cuadro de diálogo Páginas de propiedades, haga clic en la carpeta C/C++. -
Haga clic en la página de propiedades Generación de código. -
Modifique la propiedad Comprobación de seguridad del búfer.
Para establecer esta opción del compilador mediante programación
-
Vea BufferSecurityCheck.
// compile with: /c /W1
#include <cstring>
#include <stdlib.h>
#pragma warning(disable : 4996) // for strcpy use
// Vulnerable function
void vulnerable(const char *str) {
char buffer[10];
strcpy(buffer, str); // overrun buffer !!!
// use a secure CRT function to help prevent buffer overruns
// truncate string to fit a 10 byte buffer
// strncpy_s(buffer, _countof(buffer), str, _TRUNCATE);
}
int main() {
// declare buffer that is bigger than expected
char large_buffer[] = "This string is longer than 10 characters!!";
vulnerable(large_buffer);
}