Как я могу реализовать escapeshellarg внутри URL? - PullRequest
1 голос
/ 21 октября 2019

Пользователь предоставляет две переменные через форму HTML, которая называется username и name. Они используются для выполнения команды оболочки, которая в настоящее время небезопасна. У меня есть следующий код 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)"))

Но это не работает, и я думаю, что это синтаксическая ошибка. Как правильно отформатировать это?

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Что происходит, так это то, что вы сейчас пытаетесь запустить функцию внутри строки. Это возможно с дополнительными шагами, но не желательно.

То, что вы хотите сделать, - это объединить строку с выводом функции. Вы можете вставить это следующим образом:

exec('cat /opt/application/userdata/' . escapeshellarg($username) . '/following | grep -w ' . escapeshellarg($name))

(заметил, что я использовал одинарные кавычки ['], так как внутри строки не происходит расширения, это происходит несколько быстрее и сохраняет его отдельно)

Или вы можете выполнить операцию раньше и просто включить («развернуть») переменные в строку, как показано в первом примере:

$username = escapeshellarg($username);
$name = escapeshellarg($name);
exec("cat /opt/application/userdata/$username/following | grep -w $name")

(заметил, что я использовал двойные кавычки ["], так как внутри строки происходит расширение)

0 голосов
/ 21 октября 2019

Функция escapeshellarg() является встроенной в PHP, но вы пытаетесь выполнить ее как функцию оболочки. Это можно исправить, просто вытащив функцию из области видимости строки и объединив результаты:

exec("cat /opt/application/userdata/" . escapeshellarg($username) . "/following | grep -w " . escapeshellarg($name));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...