Войти в защищенный сайт CSRF - PullRequest
       14

Войти в защищенный сайт CSRF

0 голосов
/ 31 октября 2019

Я пытаюсь войти, используя 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, но после того, как я отправлю формуПохоже, я вернулся на страницу входа.

Нет ошибок, отображаемых на странице, таких как неверное имя пользователя / пароль или недействительные токены.

Что-нибудь, что я могу найти?

...