Php 我是否需要逃离echo';控制台输出的d字符串?

Php 我是否需要逃离echo';控制台输出的d字符串?,php,shell,Php,Shell,我不能确定我是否过于偏执,但如果我从命令行运行一个PHP脚本,而该脚本回显了用户定义的内容,我需要逃避它吗 例如,这会有潜在的危险吗,或者文本会以纯文本的形式呼应出来吗 $test = 'shutdown -h now'; echo $test; 如果我确实需要转义,是不是我想要的escapeshellarg()函数?shell解释来自stdin的命令,但您正在向stdout写入。所以一切都很好 但是,为了防止您不小心将它们复制粘贴到终端,逃离它们绝对不是一个坏主意,这应该不会有危险。用户不能

我不能确定我是否过于偏执,但如果我从命令行运行一个PHP脚本,而该脚本回显了用户定义的内容,我需要逃避它吗

例如,这会有潜在的危险吗,或者文本会以纯文本的形式呼应出来吗

$test = 'shutdown -h now';
echo $test;

如果我确实需要转义,是不是我想要的escapeshellarg()函数?

shell解释来自stdin的命令,但您正在向stdout写入。所以一切都很好


但是,为了防止您不小心将它们复制粘贴到终端,逃离它们绝对不是一个坏主意,这应该不会有危险。用户不能以这种方式调用任何命令。当然,如果您没有使用
exec()
或两者之间的类似函数。请注意,从命令行向phpcli传递任何参数都是危险的。因为此参数可能包含“`”,它在shell中执行命令以获得结果。

我不完全同意其他答案

写入stdout是正确的,因此输入不会被解释为命令,但是一些特殊的控制序列可以调用一些与shell相关的行为。例如,见


这些程序或命令不能调用其他程序或命令,但它们可能会激怒用户(他必须键入
reset
来重新加载外壳)。

是。如果您将用户定义的参数传递给
exec()
shell\u exec()
,那么您应该这样做。问题明确地说是关于
回显用户定义的内容
,与任何
exec()
或诸如此类的内容无关。谢谢hek2mgl,这是有意义的=)。我想我只是又过度思考了@Ric np:)也请注意ComFreek的答案。某些序列可能会破坏您的终端输出感兴趣。。。你会如何防范这种情况,康弗里克?执行(“重置”);也许在最后?@Ric
exec('reset')听起来不错!如果您正在输出随机数据(除了手动转义),我目前看不到其他方法@Ric我认为转义并不像人们想象的那么复杂。这些字符应该很容易在字符串流中捕获。我不是这方面的专家,所以我不能给出任何进一步的建议。此链接可能会帮助您:@hek2mgl不会重置整个终端吗?输出将被清除。