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

Ian*_*Ian 6 c++ system popen

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

我知道popen和system都通过shell运行命令.然而,popen()和system()一样邪恶吗?

Cha*_*tin 27

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

#include <stdlib.h>

int main(int argc, char** argv){
    (void) system(argv[1]);
}
Run Code Online (Sandbox Code Playgroud)

肯定是愚蠢的,因为有人可以把,例如,rm -rf /作为论点.当然,也可以用popen做同样愚蠢的事情.

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

邪恶 - 也就是说,错误 - 在于使用随机输入字符串作为命令而不进行某些过滤,而不是在系统调用中.


Bil*_*nch 7

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

这就是说system("PAUSE"),当一个简单的cin.getline()工作时,有点过分.