You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask注册时校验常见密码逻辑失效,用户仍被创建如何解决?

问题根因
  • 核心逻辑错误:你将创建用户的操作写在了弱密码遍历循环的else分支中,只要输入的密码和第一个读取到的弱密码不匹配,就会直接执行注册逻辑并跳转到登录页,完全不会继续校验剩余的弱密码。比如弱密码文件第一行是123456,用户输入第二行的弱密码111111,第一次循环判断不相等就直接注册成功,不会校验到第二行内容。
  • 逻辑漏洞:就算密码命中了某一行弱密码触发了flash提示,你也没有终止后续流程,循环会继续执行,后续只要遇到不匹配的行依然会触发注册。
修复方案

调整校验逻辑,先完成所有弱密码的匹配校验,确认密码不属于弱密码后,再执行注册操作:

@bp.route("/register", methods=["GET", "POST"])
def register():
    form = RegistrationForm()
    
    if form.validate_on_submit():
        # 读取弱密码列表,用集合存储查询效率更高
        with open("VanligePassord.txt", encoding="utf-8") as f:
            weak_pwd_set = {line.strip() for line in f}
        
        # 命中弱密码直接提示,不执行注册
        if form.password.data in weak_pwd_set:
            flash("Passordet ditt er for svakt")
        else:
            # 确认密码安全再创建用户
            user = User(username=form.username.data)
            user.set_password(form.password.data)
            db.session.add(user)
            db.session.commit()
            return redirect(url_for("auth.login"))
    
    return render_template("auth/register.html", form=form)
优化建议
  • 弱密码列表是固定内容,不需要每次用户请求都重新读取文件,可以在应用启动时一次性加载到内存中,减少IO开销提升性能。
  • 读取文件行时使用strip()去除换行符和首尾空白字符,比line[:-1]更稳妥,避免文件末尾行无换行符导致的匹配误差。

内容的提问来源于stack exchange,提问作者Marius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:15:03