安全嗎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 参数以更安全的方式完成此操作。
- 创建一个具有600权限的文件
例如:vi /root/my-file
机器示例.com
登录用户名
密码 密码
保存并关闭文件
- 使用下面的用户名和密码访问 URL。
curl --netrc 文件 /root/my-filehttp://example.com
- 完毕
答案4
简短的回答是,不...但是...
如果没有服务器端选项,您可以加强安全性。
- 如果这是本地内联网,则隔离广播域,并且不要使用 WiFi 或任何无线电。
- 正如Shameer所说,使用.netrc文件,将值保留在代码之外。
- 如果您相信内存是安全的,请使用环境变量 $PSWD。
- 如果这是自动化,请从 root 的 crontab 运行。
- ...在容器里。
- ...来自具有加密磁盘的虚拟机。
这些的安全性并不比使用 HTTP 的浏览器低。