Безопасные логины с колбой - PullRequest
0 голосов
/ 15 марта 2019

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

Вот мой код:

from flask import Flask, session, redirect, render_template, request


app = Flask(__name__)
app.config["SECRET_KEY"] = <byte string generated by os.urandom(24)>
app.config["PERMANENT_SESSION_LIFETIME"] = timedelta(hours=1)


@app.route("/")
def login_redirect():
    if check_login(session, False):
        return redirect("/interface")
    return redirect("/login")


@app.route("/login", methods=["POST", "GET"])
def login():
    error = ""
    if request.method == "POST":
        username = request.form["username"]
        password = request.form["password"]
        if check_password(username, password):
            session["username"] = request.form["username"]
            return redirect("/register")
        error = "Invalid username or password"
    return render_template("login.html", theme_colour=theme_colour, error=error)


def check_password(username, password):
    ph = PasswordHasher()
    db_hash, salt = database.retrieve_pw_salt(username)  # returns hashed/salted password and salt from database
    if db_hash is None:
        return False  # invalid username
    try:
        ph.verify(db_hash, salt + password)
        return True  # valid username and password
    except exceptions.VerifyMismatchError:
        return False  # invalid password


def check_login(session, requires_elevated):
    if "username" not in session:
        return False
    elif session["username"] == "admin":
        return True
    elif session["username"] == "normal" and not requires_elevated:
        return True
    return False


@app.before_request
def setup():
    session.permanent = True  # will now abide by 1 hour timeout setting

Однако недавно мне стало известно, что это может быть не очень безопасно. Честно говоря, я не совсем уверен в этом сам, поэтому мне было интересно, сможет ли кто-нибудь объяснить мне какие-либо уязвимости, если таковые имеются, и как я мог бы улучшить безопасность.

Спасибо.

1 Ответ

0 голосов
/ 17 марта 2019

Использование данных сеанса для авторизации разрешений не считается безопасным, поскольку сеансы могут быть взломаны путем кражи файлов cookie сеанса, которые затем могут оказать злоумышленнику чрезмерное влияние на учетную запись данного пользователя.Поскольку вы используете Flask, я предлагаю вам использовать Flask-Login для управления своими сессиями.Это даст вам доступ к различию между свежими и не свежими именами входа, так что конфиденциальная информация не будет доступна и манипулируется простым перехватом сеанса.

Вы также можете рассмотреть возможность использования сторонней аутентификации через Google, Facebook, LinkedIn или другого крупного провайдера, чтобы вы могли частично перенести часть тяжелой работы, связанной с предоставлением хранения пароля и имени пользователя.Двухфакторная аутентификация - это еще один способ повысить безопасность вашего приложения, отправляя тексты с уникальными кодами, чтобы отдельные пользователи могли войти в систему, или каким-либо другим вторым фактором.Я связался с документами для входа в систему при входе в колбу внизу.

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

https://flask -login.readthedocs.io / en / latest /

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