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

Безопасно ли принимать и выполнять CURL-команды, предоставленные пользователем?
Безопасно ли принимать и выполнять CURL-команды, предоставленные пользователем? - memetxsaputra @ Unsplash

С точки зрения безопасности здесь многое может пойти не так.

  • Недостаточное экранирование оболочки может привести к выполнению произвольного кода на вашем сервере.
  • Уязвимости в curl могут привести к произвольному выполнению кода на вашем сервере.
  • Нишевые особенности curl могут привести к произвольному выполнению кода на вашем сервере.
  • Сетевые запросы могут быть использованы для атаки на инфраструктуру вашего сервера изнутри.
  • Сетевые запросы с ваших серверов могут быть использованы для атаки, DDoS или преследования третьих лиц.

Есть также много способов, как сделать это более безопасным:

  • Вы можете разобрать предоставленную команду curl, чтобы убедиться, что она использует только те функции, которые вам удобны. Если используется какая-либо неожиданная опция, отклоните команду.
  • Вы можете выполнить программу curl напрямую, не используя экранирование оболочки, например, используя Runtime.exec(String[]) вместо менее безопасного Runtime.exec(String).
  • Вы можете использовать технологию контейнеризации для выполнения команды в изолированной среде.
  • Вы можете разрешить доменное имя URL-адресов, чтобы убедиться, что команда будет обращаться только к серверам за пределами вашей сети.
  • Вы можете ограничить скорость запросов.
  • Вы можете предоставить эту функциональность только проверенным, платным клиентам.
  • Вы можете реализовать функции наблюдаемости и обнаружения аномалий, чтобы попытаться обнаружить злоупотребления.

Лично я считаю, что сделать curl безопасным слишком сложно. Да, он предлагает множество возможностей, но эта широта возможностей также подразумевает огромную поверхность атаки, которую вам придется защищать. Вместо этого я бы позволил пользователям определять только определенные параметры, в безопасности которых я уверен, например, заголовки URL и маркеры авторизации. Функциональность в стиле Webhook, как правило, не нуждается в большом количестве функций.

Прикрепляю к посту несколько видео по теме:

Прикрепленное видео 1 - API для начинающих. Пример VK. [1, 5]


LetsCodeIt, 10 февраля 2023 г., 14:22