Я занимаюсь разработкой приложения для колб, которое требует входа пользователя. В настоящее время есть два пользователя, один - администратор, а другой - нормально. В настоящее время я использую сеансы для хранения имени пользователя, затем проверяю, какое имя пользователя у него есть, а затем разрешаю или запрещаю им доступ к страницам на основе их имени пользователя.
Вот мой код:
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
Однако недавно мне стало известно, что это может быть не очень безопасно. Честно говоря, я не совсем уверен в этом сам, поэтому мне было интересно, сможет ли кто-нибудь объяснить мне какие-либо уязвимости, если таковые имеются, и как я мог бы улучшить безопасность.
Спасибо.