popen vs system:popen和system一样邪恶?

时间:2011-07-28 15:53:25

标签: c++ system popen

popen缓冲输出而系统没有。这是唯一的区别吗?

据我所知,popen和system都通过shell运行命令。但是,popen()和evil一样是system()吗?

2 个答案:

答案 0 :(得分:26)

看,关于“系统是邪恶的”的整个事情本质上是那些不考虑其特定用例的安全后果的人。 system 比做自己的fork / dup / exec更“邪恶”的唯一原因是使用不当,有人可能会引入恶意命令行。所以,例如

#include <stdlib.h>

int main(int argc, char** argv){
    (void) system(argv[1]);
}

当然是 dumb ,因为有人可以将rm -rf /作为参数放入。当然,使用 popen 可以完成同样愚蠢的事情。

但是后来考虑使用命令的用户字符串执行 fork exec 的操作:存在完全相同的漏洞和愚蠢。

邪恶 - 也就是说,错误 - 在于使用随机输入字符串作为没有过滤的命令,而不是在系统调用中。

答案 1 :(得分:7)

系统和popen都不是邪恶的。它们很容易使用,导致程序被黑客入侵。如果您需要二进制文件来运行单独的二进制文件,则需要使用其中一个调用。只需正确使用它。

话虽如此,当一个简单的system("PAUSE")可行时,cin.getline()有点过分。