gpt4 book ai didi

python - 使用 Python 和 SQLite 的登录脚本

转载 作者:太空狗 更新时间:2023-10-29 12:01:33 28 4
gpt4 key购买 nike

我正在尝试使用 SQLite 创建一个登录脚本来存储用户数据。关于如何做到这一点的任何想法?我进行了数小时的研究,但没有发现任何此类问题。我将不胜感激任何帮助! :)

这是我到目前为止得到的:

user = raw_input "User:"
pswd = getpass.getpass "Password"

db = sqlite3.connect('/SABB/DATASETS/SENHAS')
c = db.cursor()
c.execute('SELECT 1 from sabb WHERE usuario = "user"')
('SELECT 1 from sabb WHERE senha = "pswd"')
if c.fetchall() is True:
print "Welcome"
else:
print "Login failed"

但它总是返回登录失败...我想根据数据库检查输入“用户”和输入“pswd”,如果它们匹配,则返回欢迎。

我把它改成了:

db = sqlite3.connect('/SABB/DATASETS/SENHAS')
c = db.cursor()
login = c.execute('SELECT * from sabb WHERE usuario = "user" AND senha = "pswd"')
if (login > 0):
print "Welcome"
else:
print "Login failed"

但我仍然每次都收到 Welcome。我还尝试了“if (login == 1)”,但它只返回登录失败。

最佳答案

根据我阅读您的源代码的方式,您从用户那里获得了用户名和密码,但实际上并没有在任何地方使用它。相反,您需要在 WHERE 语句中替换实际的用户名和密码。我相信下面的代码将是最 pythonic 的:

# Get login details from user
user = input('User: ')
password = getpass.getpass('Password: ')

# Connect to database
db = sqlite3.connect('path/to/database')
c = db.cursor()

# Execute sql statement and grab all records where the "usuario" and
# "senha" are the same as "user" and "password"
c.execute('SELECT * FROM sabb WHERE usuario = ? AND senha = ?', (user, password))

# If nothing was found then c.fetchall() would be an empty list, which
# evaluates to False
if c.fetchall():
print('Welcome')
else:
print('Login failed')

请注意,您应该始终使用 cursor.execute() 提供的方法来将用户输入的数据替换为数据库调用。使用 format()% 替换方法让您打开 sql injection .

不要这样做:

c.execute('SELECT * from sabb WHERE usuario="%s" AND senha="%s"' % (user, pswd))

想象一下,如果有人经过:

  • 用户 = Bob
  • 密码 = my_cool_password"或 1=1; --

游标将评估: SELECT * from sabb WHERE usuario="Bob"AND senha="my_cool_password" 或 1=1; -- ";

它允许我以任何用户身份登录。通过简单地更改我的输入,我可以在数据库上执行我希望的任何命令(包括删除登录名、添加登录名、删除整个表等)。

关于python - 使用 Python 和 SQLite 的登录脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33989770/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com