为什么要说明,在生产代码中使用系统功能是不可取的? 这与使用exec系列函数有什么不同?
澄清:我在很多地方都读过它,当我们在商业层面做某事时,使用系统功能是不明智的。但是我从未想过可能会出现什么问题,以及如何使用exec系列被认为比系统更好。就我而言,我的担忧被澄清了
答案 0 :(得分:1)
这个问题标记为C,php和python。我不知道python,但C和PHP函数system
函数至少在一个方面有所不同:PHP函数有一个可选的第二个参数。
在C中(根据文档,PHP做同样的事情),system
通过执行/bin/sh -c command
来运行命令。这里的问题是command
是否完全由您控制。如果command
是一个常量字符串,那么您是相当安全的。但是,如果command
有任何用户提供的元素,那么最好小心点。假设您认为这是将字符串$foo
添加到日志中的好方法。
system ("echo '$foo' >> /var/log/bar");
php中的不是一个好主意,因为$foo
可能包含以下内容(包括引号)
'x && /bin/rm -rf / && echo '
更好地使用类似exec
之类的东西,你不需要担心引用,分离参数等(而不是通过/bin/sh
),即使这样你也需要非常小心。