用户通过一个名为user name和name的html表单提供两个变量。
它们用于执行当前不安全的shell命令。
我有以下php代码:
(exec("cat /opt/application/userdata/$username/following | grep -w $name"))
我正在尝试实现escapeshellarg,但无法通过遵循正式的php文档使其正常工作,我已经尝试了:
(exec("cat /opt/application/userdata/ .escapeshellarg($username)/following | grep -w .escapeshellarg($name)"))
但这不起作用,我认为这是一个语法错误。
如何正确格式化?
最佳答案
正在发生的是,您当前正在尝试在字符串中运行函数。这是可能的额外步骤,但不是可取的。
您要做的是将字符串与函数的输出连接起来。
您可以这样内联:
exec('cat /opt/application/userdata/' . escapeshellarg($username) . '/following | grep -w ' . escapeshellarg($name))
(注意,我使用了单引号[
'
],因为字符串中没有发生扩展,所以速度稍微快一些,并保持它的独立性)或者您可以执行前面的操作,只需在字符串中包含(“expand”)变量,就像您的第一个示例提示的那样:
$username = escapeshellarg($username);
$name = escapeshellarg($name);
exec("cat /opt/application/userdata/$username/following | grep -w $name")
(注意我使用了双引号[
"
],因为字符串中发生了扩展)