Я пытаюсь войти, используя Go на CSRF-защищенном сайте. Это немного конкретный вопрос, но я думаю, что это происходит и на других сайтах.
Существуют некоторые токены CSRF, которые необходимо установить в форме. Кажется, я не могу войти, даже если я пробовал много раз. Я предполагаю, что мне не хватает чего-то очевидного, но я не вижу этого:
Текущий код:
func login(bow *browser.Browser) error {
userName := os.Getenv("USER")
password := os.Getenv("PASSWORD")
url := baseURL + "https://www.example.com/login/"
err := bow.Open(url)
if err != nil {
log.Error("cannot open login page, err: %s", err)
return err
}
form, _ := bow.Form("form#loginform")
// extract needed tokens
// csrfToken is a string, and csrfTime is a int32
cookieJar := bow.CookieJar()
csrfToken, csrfTime, err := retrieveTokens(cookieJar)
// log in to the site.
form.Input("csrf_token", csrfToken)
form.Input("csrf_time", fmt.Sprint(csrfTime))
form.Input("upgrade", "0")
form.Input("login", "1")
form.Input("username", userName)
form.Input("password", password)
time.Sleep(2 * time.Second)
err = form.Submit()
if err != nil {
log.Error("cannot submit login info, err: %s", err)
return err
}
Я могу получить правильный токен csrf и csrfTime, но после того, как я отправлю формуПохоже, я вернулся на страницу входа.
Нет ошибок, отображаемых на странице, таких как неверное имя пользователя / пароль или недействительные токены.
Что-нибудь, что я могу найти?