使用 Python 和 SQLite 的登录脚本

Joh*_*boa 3 python unix linux sqlite authentication

我正在尝试使用 SQLite 创建登录脚本来存储用户数据。关于如何做到这一点有什么想法吗?我研究了好几个小时,却没有发现任何类似的情况。我将不胜感激任何帮助!:)

\n\n

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

\n\n
user = raw_input "User:"\npswd = getpass.getpass "Password"\n\ndb = sqlite3.connect(\'/SABB/DATASETS/SENHAS\')\nc = db.cursor()\nc.execute(\'SELECT 1 from sabb WHERE usuario = "user"\')\n(\'SELECT 1 from sabb WHERE senha = "pswd"\')\nif c.fetchall() is True:\n    print\xc2\xa0"Welcome"\nelse:\n    print "Login failed"\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

我把它改为:

\n\n
db = sqlite3.connect(\'/SABB/DATASETS/SENHAS\')\nc = db.cursor()\nlogin = c.execute(\'SELECT * from sabb WHERE usuario = "user" AND senha = "pswd"\')\nif (login > 0):\n    print "Welcome"\nelse:\n    print "Login failed"\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我每次仍然受到欢迎。我也尝试过“if(login == 1)”,但它只返回登录失败。

\n

Cot*_*bud 5

从我阅读您的源代码的方式来看,您从您的用户那里获取了用户名和密码,但实际上并没有在任何地方使用它。相反,您需要替换语句中的实际用户名和密码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')
Run Code Online (Sandbox Code Playgroud)

请注意,您应该始终使用 提供的方法cursor.execute()将用户输入的数据替换到数据库调用中。使用format()or%替换方法会让您容易遭受sql 注入

不要这样做:

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

想象一下如果有人进来:

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

游标将计算: SELECT * from sabb WHERE usuario="Bob" AND senha="my_cool_password" OR 1=1; ——”;

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