它是这样的:
exec("echo '" + param + "' > /etc/test")
请注意,它具有root权限,param已过滤了以下字符:
'
"
;
`
&
答案 0 :(得分:1)
如果没有更多背景信息,您的问题将无法得到是/否答案。没关系;相反,让我们寻找弱点并突出需要关注的领域。
问题1:避免将不受信任/外部提供的数据传递给shell命令几乎总是更好;如果有人设法用糟糕的输入来破坏你的命令,那么shell会提供危险的权力。在您自己的代码中打开并编写文件,而不是使用shell来执行此操作。
问题2:如果不知道命令行将由哪个shell评估,就不可能说exec()是否安全。
问题3:如果必须通过shell传递数据(但请参见问题1),强大的过滤至关重要。但是根据你对过滤的简短描述,听起来好像是将已知的坏人物列入黑名单 - 这是一种糟糕的方法,将已知良好的角色列入白名单并将其保持在一个非常有限的集合(例如字母数字)中总是更好。 / p>
答案 1 :(得分:0)
如果未指定PATH,则无法确定执行了哪个命令。你也没有说你如何消毒param。有几件事要避免: