web-dev-qa-db-ja.com

ログイン資格情報が適切であるにもかかわらず、単純なpythonプログラムでdvwaにログインできない

import requests

target_url = "http://127.0.0.1/dvwa/login.php"
data_dict = {"csrfmiddlewaretoken": "bbbfeed6e1aea50f14a51a331054022c", "username": "admin", "password": "password", "Login": "Submit"}
response = requests.post(target_url, data=data_dict)
print(response.content.decode(errors="ignore"))

上記のコードを使用してここにログインしています: http://127.0.0.1/dvwa/login.php いくつかの読み取りを行った後、 CSRFチェックで失敗したため、data_dictに実装しました。

ここに問題があります:今、CSRFチェックを追加しても、同じことを私に与えています

無効なCRSFトークン

以前のように問題。

何が起こっていますか?よろしくお願いします。

2
Erik Dz

ログインするには、次のようなuser_tokenという非表示フィールドも送信する必要があります。

<input type='hidden' name='user_token' value='random_value_here' />

この値はページを更新するたびに変化するため、探していることを実行するには少しWebスクレイピングが必要です。次のコードは bs4 を使用してページをスクレイピングし、正しいuser_token値を取得して、アプリケーションに正常にログインします。

import requests
from bs4 import BeautifulSoup

url = "http://127.0.0.1/dvwa/login.php"

def get_token(source):
    soup = BeautifulSoup(source, "html.parser")
    return soup.find('input', { "type" : "hidden" })['value']

with requests.Session() as s:
    src = s.get(url).text
    creds = {
        "username"   : "admin",
        "password"   : "password",
        "Login"      : "Submit",
        "user_token" : get_token(src)
    }
    r = s.post(url, data = creds)
    print r.text
1
game0ver