wget、cookie、csrfを使用してログインする方法

wget、cookie、csrfを使用してログインする方法

bashが毎日このサイトをクロールする問題を解決しようとしています。これはwgetで動作し、次の機能を持っていましたpostdatapin=87654321&accessCode=1234&Submit=Submit...何年も働いて故障しました。私は彼らが投稿データに「_csrf」というフィールドを追加したことを確認し、それを確認した後、postdata次のように送信します。

_csrf=d3063789-88a2-4b50-ad38-5c34663797a0&pin=87654321&accessCode=1234&Submit=Submit

したがって、調整されたスクリプトは次のことを行います。

  1. wget index.htmlとクッキーを保存
  2. grep index.htmlはcsrfコードを取得します。
  3. wget index.html Cookie、csrfコード、パスワードを使用してログイン

しかし、私のwgetは正しく認証されていないかのようにログインページを返すので、クッキーなのかcsrfなのかわからないまだ間違った操作をしています。私のスクリプトはできませんが、ログインするとブラウザは何をしますか?

PATH_HERE="testxyz/"
MY_URL="https://csea.ehawaii.gov/iwa/index.html"
wget -q -P "$PATH_HERE" --save-cookies "$PATH_HERE"cookies.txt --keep-session-cookies "$MY_URL"
CSRFCODE=$(grep -o -P '(?<=_csrf\" value=\").*(?=\")' "$PATH_HERE"index.html)
POSTDATA='_csrf='"$CSRFCODE"'&pin=87654321&accessCode=1234&Submit=Submit'
rm "$PATH_HERE"index.html
wget -q -P "$PATH_HERE" --load-cookies "$PATH_HERE"cookies.txt --post-data $POSTDATA "$MY_URL"

ベストアンサー1

CSRFトークンはバイパスするのが難しいです。これの目的は、サイト間の要求の偽造を防ぐことです。

CSRFトークンは、サーバー側アプリケーションによって生成され、クライアントが実行する後続のHTTP要求に含まれ、クライアントに送信される一意で秘密で予測不可能な値です。後続の要求が行われると、サーバー側アプリケーションは要求に予想されるトークンが含まれていることを確認し、トークンが欠落しているか無効である場合は要求を拒否します。

したがって、単純なwgetを使用してこれを達成することは不可能です。同様のライブラリがあるため、これを達成するにはPythonなどの他の言語を使用する必要があります。美しいスープ。これを使えば元々欲しかったものを手に入れることができ

おすすめ記事