在生产代码中使用系统功能

时间:2014-02-09 16:46:31

标签: php python c

为什么要说明,在生产代码中使用系统功能是不可取的? 这与使用exec系列函数有什么不同?

澄清:我在很多地方都读过它,当我们在商业层面做某事时,使用系统功能是不明智的。但是我从未想过可能会出现什么问题,以及如何使用exec系列被认为比系统更好。就我而言,我的担忧被澄清了

1 个答案:

答案 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),即使这样你也需要非常小心。