在“curl”命令中发送密码是否不安全?

信息安全 苹果系统 卷曲
2021-08-31 21:36:23

这是我们可以向 GitHub API 发出的示例请求:

curl 'https://api.github.com/authorizations' --user "USERNAME"

这将提示输入帐户密码以继续:

Enter host password for user 'USERNAME':

如果我们不想得到提示,我们可以在提供用户名的同时提供密码:

curl 'https://api.github.com/authorizations' --user "USERNAME:PASSWORD"

但是这种方法是不是不太安全?是一次发送所有数据,还是先建立一个安全连接,curl然后才发送USERNAMEand PASSWORD

3个回答

关于连接没有区别:首先协商 TLS,HTTP 请求由 TLS 保护。

在本地,这可能不太安全,因为:

  • 密码~/.bash_history作为命令的一部分保存到命令历史记录 ( )。注意:这可以通过在运行之前在命令前面添加一个空格来避免(前提是您ignorespace在 variable中进行了设置HISTCONTROL)。
  • 在共享系统上,只要命令正在运行,它通常对其他人可见,等等pstop或者通过阅读。/proc/$pid/cmdline
  • 将密码不安全地存储在脚本中可能会带来安全风险,具体取决于脚本本身的存储位置。

但是这种方法是不是不太安全?

不,如果您使用https. 当您使用时,HTTPS您的完整交易将被加密。但是正如@Esa 提到的那样,它在本地是不安全的,您可以避免space在命令之前添加a,这样该命令就不会出现在您的命令历史记录中。如果您担心将命令暴露给其他用户,那么ps强化/proc会帮助您。按照链接启用hidepid

是一次发送所有数据,还是先建立一个安全连接,curl然后才发送USERNAMEand PASSWORD

curl不会一次发送所有数据。像其他SSL/TLS连接一样,curl将在传递任何数据之前启动SSL握手。

您可以检查您的数据是如何传输的tcpdumptshark或者Wireshark如下所示,(运行后tcpdump/tshark,运行curl命令)

TCPDUMP

[root@arif]# tcpdump -i eth0 -n src host 192.168.1.1 and dst host 192.168.1.2 and port 443 -XX

在哪里,

  • -i:用于侦听在这种情况下的特定接口 eth0
  • src host: 指定源ip地址
  • dst host: 指定目的地ip地址
  • port:指定连接443的默认端口SSL您可以根据您的要求进行更改。
  • XX:用于以 HEX 和 ASCII 显示报头、数据包内容和链路级报头。

gibberish几个数据包后,您将开始看到内容。您还可以grep使用以下命令从数据包中获取密码,

[root@arif]# tcpdump -li eth0 -n src host 192.168.1.1 and dst host 192.168.1.2 and port 443 -XX | grep 'password'

如果您的密码出现在那里,那么您的密码在传输之前没有被加密。否则,你没事。

鲨鱼

[root@arif]# tshark -O tls "ip src 192.168.1.1 and ip dst 192.168.1.2" -x

在哪里,

  • -O: 用于提及协议。
  • -x:查看数据包内容。

您也可以grep使用上述命令输入密码。

保护本地用户的最佳方法是使用“.netrc”文件。curl手册页应该有关于如何使用它的详细信息