Блокировать системные команды в программе C

Я компилирую и выполняю программу C, которая использует системную команду PHP на сервере Windows XP.

Если программа C содержит системную команду, например System("shutdown -a"), или любую системную команду, она отключает мою систему.

Я хочу, чтобы такие команды были отклонены. Как показать «отказано в доступе» в качестве вывода, когда программа пытается запустить системную команду?

Вот мой код.

Скрипт PHP содержит-

system(gcc code.c -o out);    system(out.exe);

Программа IF C содержит-

int main()     {      system("shutdown -r");   }

Есть ли способ заблокировать выполнение этих команд?


person Himesh    schedule 25.04.2013    source источник
comment
Пух. Это действительно сложный вопрос. Что будет квалифицировать системную команду? И какая именно версия GCC?   -  person hakre    schedule 25.04.2013
comment
Удаление файла shutdown.exe из папки System32 работает как поворотный момент?   -  person Shankar Narayana Damodaran    schedule 25.04.2013


Ответы (2)


Команда Windows runas

Возможно, вы сможете использовать команду Windows runas для запуска команды от имени конкретного пользователя. И в профиле этого пользователя установите список команд из белого списка. https://superuser.com/questions/42537/is-there-any-sudo-command-for-windows

Создайте собственный белый список команд

Создайте список команд на PHP или C, которым разрешено выполнять программу на C, и если команды нет в одобренном списке, она будет запрещена. Или если вам нравится жить опасно, создайте черный список и определите кучу вещей, которые вы не хотите запускать.

person Eric Leschinski    schedule 25.04.2013

Итак, простой ответ: «Не запускать от имени пользователя root» (тогда пользователь может получить доступ только к файлам, которые он / она создал, поэтому не так много шансов нанести ущерб)

Более изощренный ответ — перенести выполнение кода на виртуальную машину на сервере. Виртуальную машину можно клонировать из шаблона (или как там это называется в программном обеспечении VM) за довольно короткое время. Внутри виртуальной машины работающий там код не имеет доступа к «НАСТОЯЩЕЙ» машине, на которой он работает, поэтому, если пользователь хочет уничтожить свою виртуальную машину, это его/ее проблема — просто нужно запросить «новую виртуальную машину». машина», прежде чем они смогут продолжить работу.

person Mats Petersson    schedule 25.04.2013