在Linux平台上,我具有如下的C++代码:

// ...
std::string myDir;
myDir = argv[1]; // myDir is initialized using user input from the command line.
std::string command;
command = "mkdir " + myDir;
if (system(command.c_str()) != 0) {
   return 1;
}
// continue....
  • 将用户输入传递给system()调用是否完全安全?
  • 用户输入是否应该转义/清除?
  • 怎么样?
  • 如何将以上代码用于恶意目的?

  • 谢谢。

    最佳答案

    只是不要使用system。首选execl

    execl ("/bin/mkdir", "mkdir", myDir, (char *)0);
    

    这样,myDir始终作为单个参数传递给mkdir,并且不涉及 shell 程序。请注意,如果使用此方法,则需要 fork

    但是,如果这不只是一个示例,则应使用 mkdir C函数:
    mkdir(myDir, someMode);
    

    10-06 07:25