|
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
|
Traduction
Source
|
/GS (Vérification de la sécurité de la mémoire tampon)
/GS[-]
Vérifications de la sécurité
Mémoires tampon GS
-
Un tableau qui est supérieur à 4 octets, a plus de deux éléments et possède un type d'élément qui n'est pas un type de pointeur. -
Structure de données dont la taille est plus de 8 octets et ne contient pas de pointeurs. -
Mémoire tampon allouée à l'aide de la fonction _alloca. -
Toute classe ou structure qui contient une mémoire tampon 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; };
Initialiser le cookie de sécurité
Ce qui est protégé
-
Adresse de retour d'un appel de fonction. -
Adresse d'un gestionnaire d'exceptions pour une fonction. -
Paramètres de fonction vulnérables.
-
Fonctions qui ne contiennent pas de mémoire tampon GS. -
Les optimisations (options /O) ne sont pas activées. -
Fonctions qui ont une liste d'arguments variable (...). -
Fonctions marquées avec naked. -
Fonctions qui contiennent le code assembleur inline dans la première instruction. -
Un paramètre est utilisé uniquement de façon à être le moins exploitable possible en cas de dépassement de mémoire tampon.
Ce qui n'est pas protégé
Pour définir cette option de compilateur dans Visual Studio.
-
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet, puis cliquez sur Propriétés. Pour plus d'informations, consultez Comment : ouvrir les pages de propriétés d'un projet. -
Dans la boîte de dialogue Pages de propriétés, cliquez sur le dossier C/C++. -
Cliquez sur la page de propriétés Génération de code. -
Modifiez la propriété Vérification de la sécurité de la mémoire tampon.
Pour définir cette option du compilateur par programmation
-
Consultez 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);
}