29

Безопасно ли использовать curl -u username:password http://example.com ?

Если нет, можете ли вы дать краткое объяснение того, как кто-то может получить ваш пароль?

5 ответов5

53

Это небезопасно, потому что по умолчанию cURL использует базовую аутентификацию, когда протокол HTTP отправляет ваш пароль в виде открытого текста. Когда вы указываете строку username:password , она преобразуется в строку BASE64 в заголовке HTTP:

GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

Любой, кто сможет перехватить ваш HTTP-трафик (ваш провайдер, любой, имеющий доступ к той же беспроводной точке доступа, что и вы, и т.д.), Сможет восстановить пароль, просто используя онлайн-конвертер BASE64.

Протокол HTTPS улучшит ситуацию, установив зашифрованное соединение перед отправкой этого заголовка, предотвращая раскрытие пароля. Однако это применимо только в том случае, если пользователь обращает внимание на запрос подтверждения неизвестных сертификатов, авторизации исключений безопасности и т.д.

Обратите внимание, что аргументы команды могут быть доступны для других пользователей на том же компьютере, например, ps -ef , /proc, в файловой системе bash и в журнале вашего терминала (спасибо за комментарий @ Lambert, отмечающий это). cURL на некоторых платформах пытается скрыть пароль, поэтому, например, с помощью ps -ef вы, скорее всего, увидите вместо пароля пустое место. Однако вместо передачи пароля в качестве аргумента командной строки лучше использовать cURL, запрашивающий пароль, как обсуждалось в разделе часто задаваемых вопросов cURL.

24

Это не безопасно. Параметры командной строки видны всем пользователям.

1

Это можно сделать более безопасным способом, используя параметр --netrc-file.

  1. Создайте файл с разрешением 600

Например: vi /root /my-file

машина example.com

Войти USERNAME

пароль ПАРОЛЬ

Сохраните и закройте файл

  1. Используйте ниже для доступа к URL с именем пользователя и паролем.

curl --netrc-file /root /my-file http://example.com

  1. Готово
0

Это небезопасно при использовании схемы HTTP. Чтобы сделать это безопасно, вы должны использовать HTTPS.

Чтобы скрыть пароль от появления в истории команд, укажите только имя пользователя. Curl запросит пароль, если он не указан в команде.

0

Короткого ответа нет ... но ....

Если на стороне сервера нет опций, вы можете усилить безопасность.

  1. Если это локальная интрасеть, то изолируйте широковещательный домен и не используйте WiFi или какое-либо радио.
  2. Как говорит Шамеер, используйте файл .netrc, храните значения вне кода.
  3. Если вы уверены, что память безопасна, используйте переменные среды. $ PSWD.
  4. Если это автоматизация, запустите из корневого каталога.
  5. ... в контейнере.
  6. ... с виртуальной машины с зашифрованным диском.

Ничто из этого не является менее безопасным, чем браузер, использующий HTTP.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .