如何在每次输入密码时cURL多个PUT / DELETE请求

时间:2014-12-23 15:05:34

标签: shell security http curl

我试着搜索一个类似的问题,但没有任何实际帮助。

我想使用cURL发送多个PUT / DELETE个请求,而不必每次都输入密码。我已经知道我可以在运行命令时像-u user:password那样内联传递用户和密码信息,但我相信这会将密码保存到shell历史记录中。

还有其他更安全的方法吗?我正在使用Fish shell,但欢迎任何其他基于其他shell的答案。

2 个答案:

答案 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}}请求已完成。

阅读密码

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运行您的请求时,您的密码可以自由发现。您可以采取一些措施来提高安全性,但无论如何都不容易破解。

  1. 限制请求数量。最少要求不法行为者获取密码的时间越少。

  2. real 之外,还创建几个诱饵-u user:password文件。同时使用weak and strong password generator伪造密码(HTTP请求并不便宜,因此请考虑将此逻辑内置在您的应用程序中)。

  3. 在cURL运行之前创建临时/诱饵文件,并在完成后立即删除securely

  4. 使用随机位置存储文件。这些位置也可以在运行cURL之后创建/删除。

答案 1 :(得分:0)

我不了解fish但是在zsh / bash中,您可以将历史记录配置为不记录具有前导空格的命令,例如(命令前的前导空格)curl $URL -u $user:$password