是否curl -u username:password http://example.com
安全?
如果没有,您能否简要说明别人如何获取您的密码?
ps -ef
用来查看正在运行的进程。当您curl -u username:password http://example.com
出现在列表中时,您的目的地,用户名和密码将受到威胁。
是否curl -u username:password http://example.com
安全?
如果没有,您能否简要说明别人如何获取您的密码?
ps -ef
用来查看正在运行的进程。当您curl -u username:password http://example.com
出现在列表中时,您的目的地,用户名和密码将受到威胁。
Answers:
这是不安全的,因为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直接提示输入密码比将密码作为命令行参数传递更好。
ps
在进行覆盖之前,在该内容存在漏洞的情况下,也有一段启动期间。
这是不安全的。命令行参数对所有用户可见。
ps
和/proc
文件系统,所有用户通常都可以看到正在执行程序的@Pete命令行(无论是从脚本启动还是在终端启动)。如果该命令快速完成,则风险会降低,但仍然存在。
使用--netrc-file参数可以更安全的方式完成此操作。
例如:vi / root / my-file
机器example.com
登录USERNAME
密码PASSWORD
保存并关闭文件
curl --netrc文件/ root / my-file http://example.com