popen 缓冲输出,而系统则不缓冲。这是唯一的区别吗?
据我所知,popen 和 system 都通过 shell 运行命令。然而, popen() 是evil http://www.cplusplus.com/forum/articles/11153/作为系统()?
看,“系统是邪恶的”的整个问题本质上是人们没有考虑其特定用例的安全后果。唯一的原因system比自己做 fork/dup/exec 更“邪恶”的是使用不当,有人可能会引入恶意命令行。所以,例如
#include <stdlib.h>
int main(int argc, char** argv){
(void) system(argv[1]);
}
肯定是dumb,因为有人可以把,例如,rm -rf /
作为参数。当然,也可以做一些类似愚蠢的事情popen.
但然后考虑一些确实的事情fork and exec使用用户字符串作为命令:存在完全相同的漏洞和愚蠢之处。
邪恶——也就是说,错误——在于使用随机输入字符串作为命令而没有进行一些过滤,而不是在system call.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)