Python Flask登录页输入错误信息时不显示错误提示如何解决
问题原因
- 核心逻辑问题:用户名密码输入错误时,SQL查询返回的结果集为空,不会进入原有代码的for循环,
msg变量始终保持初始的空字符串,因此前端不会显示错误提示。 - 安全风险:原有代码直接拼接SQL字符串的写法存在严重SQL注入漏洞,攻击者可构造特殊字段绕过登录、窃取或删除数据库数据。
修正后的后端代码
@app.route('/', methods=['GET', 'POST']) def login(): msg = "" if request.method == "POST": usertype = request.form["UserType"] username = request.form["Username"] password = request.form["Password"] conn = sqlite3.connect("database.db") c = conn.cursor() # 使用参数化查询避免SQL注入 c.execute("SELECT UserType,Username,Password FROM users WHERE UserType=? and Username=? and Password=?", (usertype, username, password)) # 单用户匹配场景直接取单条结果即可,无需遍历全部结果 matched_user = c.fetchone() if matched_user: session["loginsuccess"] = True session["username"] = username return redirect(url_for("navigate")) else: # 未匹配到用户直接赋值错误提示 msg = "请输入正确的登录信息" return render_template("Login.html", msg=msg)
补充说明
原有HTML代码无需修改,已预留{{msg}}变量占位,后端逻辑修正后即可正常显示错误提示。
内容的提问来源于stack exchange,提问作者Moin Mohammed
相关产品推荐
相关产品推荐

