Самый безопасный способ передачи учетных данных в curl - это ввести их. Это то, что происходит при передаче имени пользователя, как предлагалось ранее (-u USERNAME
).
Но что, если вы не можете передать имя пользователя таким образом?
Например, имя пользователя может быть частью URL-адреса, и только пароль должен быть частью полезной нагрузки json.
ТЛ; др:
Вот как безопасно использовать curl в этом случае:
read -p "Username: " U; read -sp "Password: " P; curl --request POST -d "{\"password\":\"${P}\"}" https://example.com/login/${U}; unset P U
read
запросит имя пользователя и пароль из командной строки и сохранит отправленные значения в двух переменных, которые могут быть ссылками в последующих командах и, наконец, не установлены.
Я расскажу, почему другие решения не идеальны.
Почему переменные среды небезопасны
- Режим доступа и доступа к содержимому переменной среды не может отслеживаться (ps -eww), поскольку среда неявно доступна для процесса
- Часто приложения захватывают всю среду и регистрируют ее для целей отладки или мониторинга (иногда в виде текстовых файлов на диске, особенно после сбоя приложения)
- Переменные среды передаются дочерним процессам (следовательно, нарушается принцип наименьших привилегий)
- Поддержание их является проблемой: новые инженеры не знают, что они там есть, и не знают о требованиях вокруг них - например, не передавать их подпроцессам - поскольку они не применяются или не документированы. *
Почему небезопасно вводить его в команду в командной строке напрямую
Потому что ваш секрет в конечном итоге будет виден любому другому пользователю, выполняющему ps -aux
, поскольку в нем перечислены команды, отправленные для каждого выполняющегося в данный момент процесса.
Кроме того, потому что ваш секрет затем попадает в историю bash (после завершения оболочки).
Почему включать его в локальный файл небезопасно
Строгое ограничение доступа POSIX к файлу может снизить риск в этом сценарии. Тем не менее, это все еще файл в вашей файловой системе, незашифрованный в состоянии покоя.