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

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

安全嗎curl -u username:password http://example.com

如果没有,您能否简单解释一下别人是如何获取您的密码的?

答案1

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

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

任何能够拦截你的 HTTP 流量的人(你的提供商、任何与你访问同一无线 AP 的人等)都能够通过简单地使用在线 BASE64 转换器

HTTPS 协议会通过在发送此标头之前建立加密连接来改善这种情况,从而防止密码泄露。但是,这仅适用于用户在被要求确认未知证书、授权安全例外等时注意的情况。

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

答案2

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

答案3

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

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

例如:vi /root/my-file

机器示例.com

登录用户名

密码 密码

保存并关闭文件

  1. 使用下面的用户名和密码访问 URL。

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

  1. 完毕

答案4

简短的回答是,不...但是...

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

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

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

相关内容