【问题标题】:Searching for user input variable (string) in SQLite using python使用python在SQLite中搜索用户输入变量(字符串)
【发布时间】:2015-04-12 05:26:39
【问题描述】:

我正在尝试在表中搜索用户名,然后找到该用户的密码并根据输入检查它到目前为止我有...

    def check():
            username = logEntry.get()
            password = passEntry.get()
            curs.execute("SELECT * FROM logins WHERE username = VALUES (?);", (username))
            userExists = curs.fetchone()
            if userExists:
                curs.execute("SELECT * FROM logins WHERE password = VALUES (?);",(password))
                passExists = curs.fetchone()
                if passExists:
                    controller.show_frame(look)
            else:
                errorLabel.place(x=0, y=0)

    logButton = tk.Button(self, text="Login", command=check)
    logButton.place(x=320, y=120)

    regButton = tk.Button(self, text="Registration For New Users",
                          command=lambda: controller.show_frame(Register))
    regButton.place(x=110, y=120)

任何帮助或建议将不胜感激:)

更新:我现在遇到了一个错误,指出列用户名不存在,这是我目前所拥有的。 @antti-haapala

     def check():
            username = logEntry.get()
            password = passEntry.get()
            cursor.execute("SELECT username, password" "FROM logins WHERE username = ?",(username))
            resultrow = cursor.fetchone()
            if resultrow is not None:
                db_username, db_password = resultrow
                if username == db_username and password == db_password:
                    controller.show_frame(look)

【问题讨论】:

  • 你知道任何人都可以打开本地数据库并更改它吗?
  • 怎么样?我对 python 和 sql 真的很陌生,所以非常感谢您的帮助
  • 我想说的是,sqlite3 数据库只是一个文件,任何人都可以读取和写入,以访问您的系统。例如通过编写另一个 python 程序
  • 该程序不会用于商业用途,所以这对我来说很好,谢谢您的信息

标签: python sql search sqlite


【解决方案1】:

您的代码有问题。即使这确实是一个 Tkinter 程序,并且密码检查并没有真正增加任何安全性,也应该注意以下几点,因为所有读者可能不知道您的代码中的含义:

这种程序首先会检查是否存在具有给定用户名的 any 用户,然后会检查是否存在具有给定密码的 any 用户,这些不必相同。如果您在生产中使用这种代码,我可以通过将我无关的用户帐户密码更改为a 并使用admin:a 登录来进入管理员帐户。


尝试这样的操作,以确保您检查的密码属于您正在检查的用户:

results = cursor.execute("SELECT username, password "
                         "FROM logins WHERE username = ?", (username,))
resultrow = cursor.fetchone()
if resultrow is not None:
    db_user, db_password = resultrow
    if username == db_user and password == db_password:
        controller.show_frame(look)

请注意,存储纯文本密码是不受欢迎的;最好使用单向加盐密码散列方案对这些进行加密;例如passlib (PyPI) 是一个不错的选择。

【讨论】:

  • (请散列您的密码)
  • 我目前收到一条错误消息,提示列用户名不存在,但我对为什么会发生此错误感到困惑。
  • 也许你不小心创建了一个空数据库。
  • 我不认为我做到了,但你能看看这里是我的数据库和表正在创建 createDb = sqlite3.connect("database.db") cursor = createDb.cursor() 尝试: cursor.execute('''CREATE TABLE logins (username TEXT UNIQUE, password TEXT)''') createDb.commit() except sqlite3.OperationalError: None @antti-haapala
猜你喜欢
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多