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

JDi*_*teo 30 security curl

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

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

Dmi*_*yev 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=
Run Code Online (Sandbox Code Playgroud)

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

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

请注意,命令参数可能可供同一台机器上的其他用户查看,例如ps -ef,/proc 文件系统、bash 历史记录和终端日志(感谢@Lambert 的评论指出这一点)。某些平台上的 cURL 试图隐藏密码,因此例如ps -ef您可能会看到空格而不是密码。但是,与其将密码作为命令行参数传递,不如让 cURL 直接提示输入密码更好,如cURL 常见问题中所述

  • 即使您在 curl 成功覆盖其自己的 argv 以将数据隐藏在 `ps` 中的平台上,在执行该内容易受攻击的覆盖之前,它会启动一段时间。 (4认同)
  • @rr Digest 身份验证稍微好一点,因为它不能防止中间人攻击,因此最好使用 HTTPS。 (2认同)

小智 24

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

  • 与@Dmitry Grigoryev 合并回答它可能是最准确的。 (4认同)
  • @Pete 执行程序的命令行(无论是从脚本启动还是在终端启动)通常通过`ps` 命令和`/proc` 文件系统对所有用户可见。如果命令快速完成,风险会降低,但它仍然存在。 (2认同)
  • @Pete 答案不应该是排他性的,它们是相互补充的。因此,第二个答案可以省略第一个中解释的威胁,相反,重复它是多余的。而且我不会称该陈述为假,因为并非在所有可能的情况下都是如此。 (2认同)

归档时间:

查看次数:

45363 次

最近记录:

7 年,9 月 前