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トークン
以前のように問題。
何が起こっていますか?よろしくお願いします。
ログインするには、次のような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