我试着搜索一个类似的问题,但没有任何实际帮助。
我想使用cURL发送多个PUT
/ DELETE
个请求,而不必每次都输入密码。我已经知道我可以在运行命令时像-u user:password
那样内联传递用户和密码信息,但我相信这会将密码保存到shell历史记录中。
还有其他更安全的方法吗?我正在使用Fish shell,但欢迎任何其他基于其他shell的答案。
答案 0 :(得分:2)
curl -K, --config <config file>
指定从哪个配置文件读取curl参数。配置文件是一个文本文件,其中可以编写命令行参数,然后将其用作在实际命令行上编写的文件。
是,可以使用-K --config
选项执行此操作。点击上面的链接,⌘F查找并输入-K, --config
以阅读帮助。
基本上,您需要使用-u user:password
等用户和密码信息创建一个文件,并将其传递给您的DELETE
请求,例如:
curl $url -X DELETE -K $passfile
curl $url -X PUT ... -K $passfile
如果您不想在文件系统中保留一个文件或您的用户密码,您可以暂时创建一个密码,一次读取密码,保存并删除{{ 1}}请求已完成。
要fish curl
中的stdin
进行无声朗读,我会使用自己的(也可能是其他人)qread
:
function qread -d "Quiet read."
stty -echo
head -n 1 | read -l line
stty echo
printf $line
end
请参阅How do I echo stars (*) when reading password with `read`?以了解如何在其他shell中执行相同操作。
您可以使用mktemp生成具有唯一名称的临时文件。
例如,mktemp .XXXXXXXXX
会创建一个隐藏文件,如.qIFR5mYBO
。
mktemp
还会将新文件的名称打印到stdout
。将其保存到变量并在cURL
之后将其传递给-K
。
set -l passfile (mktemp .XXXXXXXXX)
FWIW,您稍后可以使用srm
等安全文件删除工具删除该文件。
srm $passfile
cURL运行您的请求时,您的密码可以自由发现。您可以采取一些措施来提高安全性,但无论如何都不容易破解。
限制请求数量。最少要求不法行为者获取密码的时间越少。
除 real 之外,还创建几个诱饵-u user:password
文件。同时使用weak and strong password generator伪造密码(HTTP请求并不便宜,因此请考虑将此逻辑内置在您的应用程序中)。
在cURL运行之前创建临时/诱饵文件,并在完成后立即删除securely。
使用随机位置存储文件。这些位置也可以在运行cURL之后创建/删除。
答案 1 :(得分:0)
我不了解fish
但是在zsh / bash中,您可以将历史记录配置为不记录具有前导空格的命令,例如(命令前的前导空格)curl $URL -u $user:$password