если вы используете это в терминале, имеете ли вы в виду, что обе учетные данные хранятся в истории bash?
Франциско Тапиа
15
Такая команда не является безопасной, потому что другой пользователь может использовать, ps -efчтобы увидеть, какие процессы запущены. Когда вы curl -u username:password http://example.comпоявитесь в списке, ваш адрес, имя пользователя и пароль будут скомпрометированы.
Это небезопасно, потому что по умолчанию cURL использует базовую аутентификацию, когда протокол HTTP отправляет ваш пароль в виде открытого текста. Когда вы указываете username:passwordстроку, она преобразуется в строку BASE64 в заголовке HTTP:
Любой, кто сможет перехватить ваш HTTP-трафик (ваш провайдер, любой, имеющий доступ к той же беспроводной точке доступа, что и вы, и т. Д.), Сможет восстановить пароль, просто используя онлайн-конвертер BASE64 .
Протокол HTTPS улучшит ситуацию, установив зашифрованное соединение перед отправкой этого заголовка, предотвращая раскрытие пароля. Однако это применимо только в том случае, если пользователь обращает внимание на запрос подтверждения неизвестных сертификатов, авторизации исключений безопасности и т. Д.
Обратите внимание, что аргументы команды могут быть доступны для других пользователей на той же машине, чтобы увидеть, например ps -ef, файловую систему / proc, в вашей истории bash и в журнале вашего терминала (спасибо за комментарий @ Lambert, отмечающий это). cURL на некоторых платформах пытается скрыть пароль, поэтому, например, ps -efвы, скорее всего, увидите вместо пароля пустое пространство. Однако вместо передачи пароля в качестве аргумента командной строки лучше использовать cURL, запрашивающий пароль напрямую, как обсуждалось в разделе часто задаваемых вопросов cURL .
Даже если вы находитесь на платформе, где curl успешно перезаписывает свой собственный argv, чтобы скрыть данные ps, существует период, пока он запускается, прежде чем будет выполнена эта перезапись, когда этот контент уязвим.
Чарльз Даффи
А как насчет дайджест-аутентификации? Не используется ли curl по умолчанию?
rr-
2
Аутентификация @rr Digest чуть лучше, так как она не предотвращает атаки типа «человек посередине», поэтому вам все же лучше использовать HTTPS.
Дмитрий Григорьев
1
@rr Как вы утверждаете, что StartSSL не пользуется доверием большинства браузеров ? Ожидаете ли вы много пользователей Windows 95 или Firefox 1.5?
Объединившись с @Dmitry Grigoryev, ответ может быть самым точным.
Франциско Тапия
1
Да, я полностью пропустил большую часть проблемы, которую я должен признать.
Дмитрий Григорьев
Команда может быть частью сценария, доступного только для чтения пользователю ...
Пит
2
Команды @Pete для запуска программ (независимо от того, запущены они из скрипта или из терминала) обычно видны всем пользователям через psкоманду и /procфайловую систему. Если команда заканчивается быстро, риск уменьшается, но он все еще там.
RBerteig
2
Ответы @Pete не должны быть эксклюзивными, они дополняют друг друга. Так что во втором ответе можно опустить угрозу, описанную в первом, скорее, было бы излишним повторять ее. И я бы не назвал это утверждение ложным, потому что это не так во всех возможных случаях.
Дмитрий Григорьев
1
Это можно сделать более безопасным способом, используя параметр --netrc-file.
Создайте файл с разрешением 600
Например: vi / root / my-file
машина example.com
логин USERNAME
пароль ПАРОЛЬ
Сохраните и закройте файл
Используйте ниже для доступа к URL с именем пользователя и паролем.
ps -ef
чтобы увидеть, какие процессы запущены. Когда выcurl -u username:password http://example.com
появитесь в списке, ваш адрес, имя пользователя и пароль будут скомпрометированы.Ответы:
Это небезопасно, потому что по умолчанию cURL использует базовую аутентификацию, когда протокол HTTP отправляет ваш пароль в виде открытого текста. Когда вы указываете
username:password
строку, она преобразуется в строку BASE64 в заголовке HTTP:Любой, кто сможет перехватить ваш HTTP-трафик (ваш провайдер, любой, имеющий доступ к той же беспроводной точке доступа, что и вы, и т. Д.), Сможет восстановить пароль, просто используя онлайн-конвертер BASE64 .
Протокол HTTPS улучшит ситуацию, установив зашифрованное соединение перед отправкой этого заголовка, предотвращая раскрытие пароля. Однако это применимо только в том случае, если пользователь обращает внимание на запрос подтверждения неизвестных сертификатов, авторизации исключений безопасности и т. Д.
Обратите внимание, что аргументы команды могут быть доступны для других пользователей на той же машине, чтобы увидеть, например
ps -ef
, файловую систему / proc, в вашей истории bash и в журнале вашего терминала (спасибо за комментарий @ Lambert, отмечающий это). cURL на некоторых платформах пытается скрыть пароль, поэтому, например,ps -ef
вы, скорее всего, увидите вместо пароля пустое пространство. Однако вместо передачи пароля в качестве аргумента командной строки лучше использовать cURL, запрашивающий пароль напрямую, как обсуждалось в разделе часто задаваемых вопросов cURL .источник
ps
, существует период, пока он запускается, прежде чем будет выполнена эта перезапись, когда этот контент уязвим.Это не безопасно. Параметры командной строки видны всем пользователям.
источник
ps
команду и/proc
файловую систему. Если команда заканчивается быстро, риск уменьшается, но он все еще там.Это можно сделать более безопасным способом, используя параметр --netrc-file.
Например: vi / root / my-file
машина example.com
логин USERNAME
пароль ПАРОЛЬ
Сохраните и закройте файл
curl --netrc-file / root / my-file http://example.com
источник
Это небезопасно при использовании схемы HTTP. Чтобы сделать это безопасно, вы должны использовать HTTPS.
Чтобы скрыть пароль от появления в истории команд, укажите только имя пользователя. Curl запросит пароль, если он не указан в команде.
источник
Короткого ответа нет ... но ....
Если на стороне сервера нет опций, вы можете усилить безопасность.
Ничто из этого не является менее безопасным, чем браузер, использующий HTTP.
источник