“ curl -u用户名:密码http://example.com”是否安全?


30

是否curl -u username:password http://example.com安全?

如果没有,您能否简要说明别人如何获取您的密码?


6
如果您在终端中使用该密码,是否要记住两个凭据都存储在bash的历史记录中?
弗朗西斯科·塔皮亚

15
这样的命令并不安全,因为另一个用户可能会ps -ef用来查看正在运行的进程。当您curl -u username:password http://example.com出现在列表中时,您的目的地,用户名和密码将受到威胁。
兰伯特

尽管这里的问题很重要,但您可能也对Information Security
StackExchange

Answers:


54

这是不安全的,因为cURL 默认为基本身份验证,其中HTTP协议以明文形式发送密码。当您指定username:password字符串时,它将在HTTP标头中转换为BASE64字符串:

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

能够拦截您的HTTP流量的任何人(您的提供商,与您访问同一无线AP的任何人等等)都将可以通过使用在线BASE64转换器来恢复密码。

通过在发送此标头之前建立加密连接,HTTPS协议可以使事情变得更好,从而防止密码被泄露。但是,仅当要求用户注意确认未知证书,授权安全例外等时,这才适用。

请注意ps -ef,在bash历史记录和终端日志中,同一机器上的其他用户可能可以使用命令自变量来查看例如/ proc文件系统(感谢@Lambert的注释,请注意)。在某些平台上,cURL会尝试隐藏密码,因此例如,ps -ef您很可能会看到空格而不是密码。但是,如在cURL faq上讨论的那样,让cURL直接提示输入密码比将密码作为命令行参数传递更好。


4
即使您在curl成功覆盖其自身的argv以便从中隐藏数据的平台上,ps在进行覆盖之前,在该内容存在漏洞的情况下,也有一段启动期间。
Charles Duffy 2015年

摘要认证呢?默认情况下,curl不使用它吗?
rr-

2
@rr摘要式身份验证稍有改善,因为它不能阻止中间人攻击,因此使用HTTPS还是更好。
德米特里·格里戈里耶夫

1
@rr您如何断言大多数浏览器都不信任StartSSL ?您期望有许多Windows 95或Firefox 1.5用户吗?
哈根·冯·埃岑


24

这是不安全的。命令行参数对所有用户可见。


4
与@Dmitry Grigoryev合并,可能是最准确的一种。
弗朗西斯科·塔皮亚

1
是的,我完全错过了我必须承认的大部分问题。
德米特里·格里戈里耶夫

命令可能是用户只能读取的脚本的一部分...
Pete 2015年

2
通过程序ps/proc文件系统,所有用户通常都可以看到正在执行程序的@Pete命令行(无论是从脚本启动还是在终端启动)。如果该命令快速完成,则风险会降低,但仍然存在。
RBerteig

2
@Pete答案不应该排他,它们是相辅相成的。因此,第二个答案可以省略第一个答案中所述的威胁,这是可以的,相反,重复它是多余的。而且我不会称该语句为假,因为在每种情况下它都不是正确的。
德米特里·格里戈里耶夫

1

使用--netrc-file参数可以更安全的方式完成此操作。

  1. 创建具有600权限的文件

例如:vi / root / my-file

机器example.com

登录USERNAME

密码PASSWORD

保存并关闭文件

  1. 使用以下内容通过用户名和密码访问URL。

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

  1. 完成了

0

使用HTTP方案时这是不安全的。为了使其安全,应使用HTTPS。

要隐藏密码,使其不显示在命令历史记录中,请仅提供用户名。如果命令中未提供,Curl将提示输入密码。


如果HTTPS不可用,则不是有用的答案。cURL是“客户端”。
mckenzm

0

简短的答案是没有...但是...

如果没有服务器端选项,则可以增强安全性。

  1. 如果这是本地Intranet,则隔离广播域,并且不要使用WiFi或任何无线电。
  2. 正如Shameer所说,使用.netrc文件,将值保留在代码之外。
  3. 如果您相信内存是安全的,请使用环境变量。$ PSWD。
  4. 如果这是自动化的,请从root的crontab运行。
  5. ...在一个容器中。
  6. ...从带有加密磁盘的VM中获取。

这些都不比使用HTTP的浏览器安全性低。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.