使用用户数据库中的Python凭据安全登录

2024-05-03 14:19:25 发布

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

我喜欢用Python创建一个安全的登录,但是需要从数据库中检查user表,这样多个用户就可以使用自己的密码登录。 主要是这样,工作起来像一个魅力,但不安全当然。在

while True:
USER = input("User: ")
PASSWORD = getpass.getpass()

db = sqlite3.connect("test.db")
c = db.cursor()
login = c.execute("SELECT * from LOGIN WHERE USER = ? AND PASSWORD = ?", (USER, PASSWORD))

if (len(login.fetchall()) > 0):
    print()
    print("Welcome")
    break

else:
    print("Login Failed")
    continue

所以我试着散列密码,当然也可以,但是我不能把它存储在数据库中去检查,所以根本就没有检查。在

^{pr2}$

我尝试这样做,以便从数据库中获取密码哈希,但没有成功:

USER = input("User: ")
db = sqlite3.connect("test.db")
c = db.cursor()
hash = "SELECT HASH FROM LOGIN WHERE USER = %s"%USER
print(hash)
passwd = getpass.getpass("Password: ")

if sha256_crypt.verify( passwd, hash ):
    print("Everything worked!")

else:
    print("Try again :(")

所以我的问题是,为我的程序创建安全登录的最佳方法是什么?我确实需要用户表中所述的不同用户的不同登录名。我以前在MySQL上做过,但为了测试目的,我现在在sql3上尝试。所以那没关系。只要我知道该怎么做。在


Tags: 用户test数据库密码inputdbconnectpassword
1条回答
网友
1楼 · 发布于 2024-05-03 14:19:25

你真的应该避免自己做这件事。有很多库可以正确实现这种身份验证。在

然而,遵循的模式是这样的:

  • 不要在数据库中存储纯密码。创建用户帐户后,立即散列密码并将其存储。在
  • 当用户登录时,散列他们输入的密码值,然后将其与数据库中存储的值进行比较。在

(请注意,为了获得良好的安全性,您不仅需要使用现代哈希算法,还应该使用salt)。在

相关问题 更多 >