Подтвердить что ты не робот

Next_is_valid() не существует в flask-login?

Документ для флажков говорит, что мы должны проверять следующий, используя next_is_valid(), но я не могу найти такой метод:

Предупреждение: вы ДОЛЖНЫ проверить значение следующего параметра. Если вы этого не сделаете, ваше приложение будет уязвимым для открытых перенаправлений.

@app.route('/login', methods=['GET', 'POST'])
def login():
    # Here we use a class of some kind to represent and validate our
    # client-side form data. For example, WTForms is a library that will
    # handle this for us.
    form = LoginForm()
    if form.validate_on_submit():
        # Login and validate the user.
        login_user(user)

        flask.flash('Logged in successfully.')

        next = flask.request.args.get('next')
        if not next_is_valid(next):
            return flask.abort(400)

        return flask.redirect(next or flask.url_for('index'))
    return flask.render_template('login.html', form=form)

Запустив это, я получаю сообщение об ошибке:

NameError: global name 'next_is_valid' is not defined

И если я это сделаю:

from flask.ext.login import next_is_valid
>> ImportError: cannot import name next_is_valid

Где функция next_is_valid(), и если она не существует, как я могу проверить параметр next?

4b9b3361

Ответ 1

Не сказано, что вы должны проверить next на next_is_valid, только

Вы ДОЛЖНЫ проверить значение следующего параметра.

next_is_valid - это просто примерная функция.

Вы должны определить, действительно ли next на основании ваших собственных критериев. next - это URL для перенаправления на успешный вход в систему. Если у вас есть какие-либо разрешения на применение или ограничения на вашем сайте, вы должны убедиться, что они соблюдены.

Например, пользователь может попытаться войти в систему с запросом url http://example.com/login?next=admin/delete/all/users. Если попытка входа была успешной, и разрешение администратора не было проверено в вашей функции входа в систему или на самой конечной точке, возможно, могут произойти плохие вещи. Все зависит от того, как вы структурируете свое приложение и контролируете доступ к отдельным конечным точкам.