Python - Как войти в веб-форму со скрытыми значениями? - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь написать скрипт Python для входа на следующий сайт, чтобы автоматически отслеживать некоторые детали учетной записи: https://gateway.usps.com/eAdmin/view/signin

У меня есть правильные учетные данные, но что-то работает не совсем правильно, я не знаю, из-за скрытых входных данных, которые существуют в форме

import requests
from bs4 import BeautifulSoup

user='myusername'
passwd='mypassword'

s=requests.Session()

r=s.get("https://gateway.usps.com/eAdmin/view/signin")
soup=BeautifulSoup(r.content)
sp=soup.find("input",{"name":"_sourcePage"})['value']
fp=soup.find("input",{"name":"__fp"})['value']
si=soup.find("input",{"name":"securityId"})['value']

data={
  "securityId": si,
  "username":user,
  "password":passwd,
  "_sourcePage":sp,
  "__fp":fp}

headers={"Content-Type":"application/x-www-form-urlencoded",
  "Host":"gateway.usps.com",
  "Origin":"https://gateway.usps.com",
  "Referer":"https://gateway.usps.com/eAdmin/view/signin"}

login_url="https://gateway.usps.com/eAdmin/view/signin" 

r=s.post(login_url,headers=headers,data=data,cookies=r.cookies)
print(r.content)

_sourcePage, securityId и __fp - это скрытые входные значения из источника страницы. Я удаляю это со страницы, но, очевидно, когда я получаю запрос POST, я снова открываю URL, поэтому эти значения меняются и больше не действительны. Однако я не уверен, как переписать строку POST, чтобы убедиться, что я извлекаю правильные скрытые значения для отправки.

Не думаю, что это относится только к этому сайту, но для любого сайта со скрытыми случайными значениями.

1 Ответ

1 голос
/ 13 апреля 2019

Вы не можете сделать это.

Вы пытаетесь аутентифицироваться с помощью HTTP-запроса POST вне области приложения, страницы входа и его собственной веб-формы.

По соображениям безопасности на веб-странице реализованы разные методы, один из всех анти CSRF-токенов (который, вероятно, __ sourcePage ), чтобы гарантировать, что запрос на вход в систему происходит исключительно отвеб-страница.

По этой причине каждый раз, когда вы чистите страницу, захватывая содержимое скрытых входных данных, веб-приложение генерирует их каждый раз.Таким образом, когда вы повторно используете их для создания окончательного запроса, они, конечно, больше не действительны.

См. Также: https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...