Как предотвратить попадание оболочки в сетенв
У меня есть следующий простой код C
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
setenv(key, value, 1);
return 0;
}
И если выполнить это, как показано ниже,
./a.out TEST $(rm /)
Он просто удалит корень (допустим, что бинарный файл c имеет на это право). Теперь я могу предотвратить это, добавив qoutes('') к аргументу, как показано ниже
./a.out TEST '$(rm /)'
Я пытаюсь смоделировать то же самое внутри кода C (как показано ниже), но это не помогает, Есть идеи / помощь по достижению этого?
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
char key[2048] = {0};
char value[2048] = {0};
snprintf(key, 2048, "'%s'", argv[1]);
snprintf(value, 2048, "'%s'", argv[2]);
setenv(key, value, 1);
return 0;
}