我的 php 网页在服务器上运行一个命令:
exec("encrypt -pPassw0rd infile outfile; rm infile");
服务器是linux。
刚刚跑了一个:
grep -R "Passw0rd" /
这足以检查密码是否未存储在任何地方吗?
这里的重点是,来自用户的输入,无论上下文如何,都不应该被信任!
为了对抗这些类型的攻击,PHP 提供了两个函数,escapeshellarg() 和 escapeshellcmd()。
escapeshellarg() 函数旨在删除或以其他方式消除从用户输入接收到的任何潜在有害字符,以用作系统命令(在我们的示例中为 zip 命令)的参数。该函数的语法如下:
escapeshellcmd() 与其对应的类似,只是它只会转义对底层操作系统具有特殊含义的字符。与 escapeshellarg() 不同,escapeshellcmd() 不会处理包含空格的输入。
如果用户输入将用作系统调用的参数列表的一部分,则 escapeshellarg() 函数始终是更好的选择。
希望有帮助。
法比奥@fcerullo