shell_exec со строкой curl - PullRequest
1 голос
/ 03 июля 2019

Поработав с несколькими API, я обнаружил, что почти все они используют curl для демонстрации образца auth./not-auth.request.

Мой вопрос:

Насколько опасно использовать shell_exec( % some curl string % ); на сервере в производственной среде для отправки запросов?

Что конкретно является дополнительнымриски, связанные с этим?

Система, которую PHP "нативно" использует для запросов, представляет собой пакет curl, который предоставляет некоторую оболочку для функций curl и, вероятно, приводит к чистому curl после компиляции.

Однако, это громоздко& довольно многословно, когда вы пишете это.

Я сделал несколько тестов, и shell_exec работает нормально.

Например, следующий код возвращает результаты полностью, как и ожидалось.$json отлично отформатирован.

$res = shell_exec('curl "https://www.zohoapis.com/crm/v2/settings/profiles" -H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"');

$json = json_decode($res, true);

var_dump( $json, $res );

Учитывая, что действие фактическое , которое происходит глубоко на сервере, должно быть полностью идентичным, равно как и нет существенной разницы в процессе (нет пользователяв любом случае входные данные, используемые данные одинаковы и т. д.) Я не вижу никаких возможных негативных последствий или каких-либо дополнительных рисков, которые могут возникнуть при использовании shell_exec.

С другой стороны, потенциальные выгоды будутбыть весьма значительным.

1 Ответ

1 голос
/ 04 июля 2019

Это довольно много затрат (escapeshellarg, exec / proc_open) только для того, чтобы избежать встроенного API. Существует довольно много инструментов CLI (ffmpeg, uno / soffice,…), которые вы должны предпочесть изворотливым реализациям в PHP. Керл не попадает в эту категорию.

Если вы не хотите использовать Guzzle или более кросс-язычную PHPRequests , тогда перейдите на более простую упаковку curl .

  • Смотри, например, вчера реддит пост для базового варианта.
  • Или даже curl (). Php , который я использую / сделал:

    $res = curl($api_url)->httpheader(["Auth: …"])->exec();
    

См? Не должен быть тупым. Интерфейс класса просто избегает CURL_ префиксов и сохраняет существующие имена функций / опций. (Потому что, конечно, API PHP curl ужасен.)

И вы избежите жесткого кодирования и повторения ключа авторизации для разных конечных точек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...