Я изучаю безопасность кода и пытаюсь выполнить анализ безопасности на следующих 2 фрагментах, взятых из «Написание безопасного кода», 2-е издание:
http://www.di.uniba.it/~ndm/corsi/sa/materiale/lab/StackOverrun.c
http://www.di.uniba.it/~ndm/corsi/sa/materiale/lab/FormatString.c
В первом я думаю, что единственным небезопасным утверждением является strcpy(buf, input);
, которое должно быть strncpy(buf, input, sizeof(buf-1));
Все остальные printf безопасны: даже если они используют меньше аргументов, чем они говорят, ониделают это специально.
Во втором снова printf
безопасны, но fprintf(stdout, buf);
нет и должны быть заменены следующим кодом: fprintf(stdout, "%s", buf);
Моя проблемаявляется то, что pFile = fopen(argv[1], "r");
также считается небезопасным программами анализа из-за возможного состояния гонки, но я не вижу способа, которым это может быть использовано в этом коде.Если файл открывается только для чтения, может ли злоумышленник сделать с ним что-нибудь неприятное?Я думаю, что нет.
Итак, вопрос в том, считаете ли вы этот анализ правильным?Можете ли вы найти другие недостатки или мои рассуждения прослушиваются?
Спасибо!