如何使用Shell中的CURL在启用CSRF的网站上通过https上传文件?

时间:2017-04-16 13:52:22

标签: linux shell curl https csrf

我需要使用 CURL 通过https协议登录网站,并在特定文件夹中上传文件。我可以通过HTTPS在启用CSRF的网站上通过curl登录网站。但是我无法上传文件。我猜是因为为HTTPS协议启用了 CSRF 令牌。 所以我需要弄清楚如何处理CSRF令牌并使用CURL命令通过HTTPS协议上传文件。

登录格式:(工作)

curl -u username:password https://ftp.example.com

上传格式:(不工作)

curl -k -T "./testfile.txt" -u "username":"password" https://example.com/upload/

注1:我目前正在运行此命令RHEL 6。

注2:我需要处理CSRF令牌。

注3:能够通过ftp和sftp协议登录/上传。

我非常感谢为此提供解决方案。谢谢!

1 个答案:

答案 0 :(得分:0)

工作解决方案!

最后一些我如何设法为此找到解决方案,

我们需要在第一次连接中下载CSRF令牌,然后在第二次连接尝试时使用下载的CSRF令牌。我们来看下面的示例脚本。

#!/bin/sh

logs_path="/home/usr/logs" #Change your path here
my_username="testuser"     #Change your username here
my_password="testuser"     #Change your password here
host_name="localhost.com"  #Change your sitename here   

touch "$logs_path/testfile.test"

curl -k -c "$logs_path/cookies.txt" -u "$my_username":"$my_password" "https://$host_name:443" > /dev/null 2>&1

curl -k -b "$logs_path/cookies.txt" -T "$logs_path/testfile.test" -u "$my_username":"$my_password" "https://$host_name:443/puts/" > /dev/null 2>&1

status="$?"
if [[ $status == 0 ]]; then
echo -e "\nSuccess!"
else
echo -e "\nFailed!"
fi