如何在用户名和密码来自数据库的python脚本中添加最大登录尝试?

2024-07-06 18:17:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我从网上找到了这个,并试图把它应用到我的学校项目中。我试着使用while循环,但没有成功

def logs():
    mycursor = mydb.cursor()
    sql = "SELECT * FROM login_data WHERE BINARY username = '%s' OR BINARY email_address = '%s' AND BINARY password = '%s'" % (
        username.get(), username.get(), password.get())
    mycursor.execute(sql)
    if mycursor.fetchone():
        subprocess.Popen([sys.executable, "Manager.py"])
        exit()
    else:
        messagebox.showinfo("Warning", "Wrong username or password")

2条回答

如果您想从头开始构建它,以下是我的良好实践:

  1. 创建一个表或一个新列,其中包含用户的尝试次数

假设您创建了一个新表LoginAttemp,列为ID、USERNAME、ATTEMP

  1. 在用户名有效、密码无效的情况下,评估每次登录尝试,并按1添加ATTEMP number

  2. 在每次登录尝试时创建尝试检查器。当数据库中的尝试次数超过最大值时,将其设置为异常登录

  3. 您应该为重置登录尝试设置条件 如果您想改用可用的工具,这里有一些很好的答案:

Lock out users after too many failed login attempts

https://code.google.com/archive/p/django-brutebuster/

https://pypi.org/project/django-axes/

您可以声明一个全局变量fail_count。(此功能之外) 在else部分中,每次向其添加1。 确保为每个会话重置失败计数=0

fail_count = 0
def logs():
    mycursor = mydb.cursor()

    if fail_count < 3:
        sql = "SELECT * FROM login_data WHERE BINARY username = '%s' OR BINARY email_address = '%s' AND BINARY password = '%s'" % (
            username.get(), username.get(), password.get())
        mycursor.execute(sql)
        if mycursor.fetchone():
            subprocess.Popen([sys.executable, "Manager.py"])
            exit()
        else:
            fail_count = fail_count + 1
            messagebox.showinfo("Warning", "Wrong username or password")

相关问题 更多 >