我正在尝试脚本访问使用身份验证的网站。问题是,当我访问该站点时,它会将我重定向到另一个提示输入凭据的站点。身份验证完成后,控件将传递回原始站点(称为单点登录的功能)。我无法使用curl的“ - U”和“用户名:密码”选项。
还有其他方法可以达到这个目的吗?
答案 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
将从命令行提示输入用户名和密码,并将提交的值存储在两个变量中,这些变量可以在后续命令中引用,并且最终未设置。
我将详细说明为什么其他解决方案不理想。
为什么环境变量不安全
为什么直接在命令行上将其键入命令不安全
因为您的机密最终将被运行ps -aux
的任何其他用户看到,因为它列出了为每个当前正在运行的进程提交的命令。
同样是因为您的密钥随后出现在bash历史记录中(一旦shell终止)。
为什么将其包含在本地文件中不安全 对文件的严格POSIX访问限制可以减轻这种情况下的风险。但是,它仍然是文件系统上的文件,静态时未加密。