如何将凭据传递给curl

时间:2015-09-26 22:29:14

标签: curl

我正在尝试脚本访问使用身份验证的网站。问题是,当我访问该站点时,它会将我重定向到另一个提示输入凭据的站点。身份验证完成后,控件将传递回原始站点(称为单点登录的功能)。我无法使用curl的“ - U”“用户名:密码”选项。

还有其他方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:0)

将凭据传递给curl的最安全方法是提示插入凭据。如先前建议的那样传递用户名时,会发生这种情况(-u USERNAME)。

但是如果您不能以这种方式传递用户名怎么办? 例如,用户名可能需要是url的一部分,而只有密码是json负载的一部分。

tl;博士: 在这种情况下,这是安全使用curl的方法:

read -p "Username: " U; read -sp "Password: " P; curl --request POST -d "{\"password\":\"${P}\"}" https://example.com/login/${U}; unset P U

read将从命令行提示输入用户名和密码,并将提交的值存储在两个变量中,这些变量可以在后续命令中引用,并且最终未设置。

我将详细说明为什么其他解决方案不理想。

为什么环境变量不安全

  1. 由于环境对于进程是隐式可用的,因此无法跟踪环境变量内容的访问和暴露模式(ps -eww)
  2. 应用程序通常会抓住整个环境并记录下来以进行调试或监视(有时在磁盘上以纯文本格式记录日志文件,尤其是在应用程序崩溃后)
  3. 环境变量向下传递到子进程(因此违反了最小特权原则)
  4. 维护它们是一个问题:新工程师不知道他们在那里,也不了解周围的需求-例如,不要将它们传递给子流程-因为它们没有得到执行或记录。

为什么直接在命令行上将其键入命令不安全 因为您的机密最终将被运行ps -aux的任何其他用户看到,因为它列出了为每个当前正在运行的进程提交的命令。 同样是因为您的密钥随后出现在bash历史记录中(一旦shell终止)。

为什么将其包含在本地文件中不安全 对文件的严格POSIX访问限制可以减轻这种情况下的风险。但是,它仍然是文件系统上的文件,静态时未加密。