Почему мой логин не работает с запросами Python? - PullRequest
0 голосов
/ 21 ноября 2018

Последние пару дней я пытался войти в систему, используя запросы Python, и у меня возникли проблемы.

Вот мой код:

import requests

LOGINURL = "https://admin.neopets.knetik.com/admin/login"
PROTECTEDPAGE = "https://admin.neopets.knetik.com/admin/order_summary/list"

payload = {
    "_target_path": "https://admin.neopets.knetik.com/admin/dashboard",
    "_username": "***",
    "_password": "***",
    "_remember_me": "on",

}

with requests.session() as session:
     post = session.post(LOGINURL, data=payload)
     response = session.get(PROTECTEDPAGE)
     print(response.text)

Я уверен, что у меня есть все необходимые параметры.Я попытался найти скрытые входы, и единственное, с чем я столкнулся, было _target_path.

Есть идеи, что мне не хватает?

1 Ответ

0 голосов
/ 21 ноября 2018

Страница входа довольно проста, но вы отправляете сообщение не по адресу.

URL-адрес, на который вы отправляете сообщение, служит для формы входа, но он не принимает учетные данные для входа.Тег <form> указывает, куда их отправлять:

<form action="/admin/admin_login_check" ... method="POST">

Атрибут action - это относительный URL-адрес, указывающий, куда вам нужно отправить данные POST.

Использование этот путь в качестве URL-адреса для входа:

LOGINURL = "https://admin.neopets.knetik.com/admin/admin_login_check"
PROTECTEDPAGE = "https://admin.neopets.knetik.com/admin/order_summary/list"

payload = {
    "_target_path": "https://admin.neopets.knetik.com/admin/dashboard",
    "_username": "***",
    "_password": "***",
    "_remember_me": "on",

}

with requests.session() as session:
     post = session.post(LOGINURL, data=payload)
     response = session.get(PROTECTEDPAGE)
     print(response.text)

В некоторых реализациях требуется, чтобы вы сначала отправили GET на страницу формы, чтобы установить cookie сеанса.Страница не использует никакой защиты CSRF, поэтому вам не нужно загружать форму для анализа этой информации.

Поскольку на этих страницах используется HTTPS, вы можете также передать исходный URL-адрес формы какзаголовок Referer (обычно фильтруется для HTTP или при обходе доменов в качестве меры безопасности и конфиденциальности), сайт может использовать это в качестве дополнительной меры против автоматических входов в систему:

FORMURL = "https://admin.neopets.knetik.com/admin/login"
LOGINURL = "https://admin.neopets.knetik.com/admin/admin_login_check"
PROTECTEDPAGE = "https://admin.neopets.knetik.com/admin/order_summary/list"

payload = {
    "_target_path": "https://admin.neopets.knetik.com/admin/dashboard",
    "_username": "***",
    "_password": "***",
    "_remember_me": "on",

}

with requests.session() as session:
    session.get(FORMURL)
    post = session.post(LOGINURL, data=payload, headers={'Referer': FORMURL})
    response = session.get(PROTECTEDPAGE)
    print(response.text)

Еслиэто все еще не работает, сервер использует другие методы перехвата робота.См. python request.get всегда получите 404 для обзора того, какие стратегии вы можете использовать, если вы действительно хотите продвинуть это.

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