0

我有一个使用 Python 和 pgdb 访问的 SQL 数据库。我计划开放对一组用户的访问,因此我想合并一个登录功能,该功能接受用户名和密码,该用户名和密码会根据用户的数据库信息进行检查。我不怎么使用 Python,所以这花了我相当多的时间,但收效甚微。我找到了有用的线程,使用 PHP 但不幸的是在 Python 中没有,所以我决定开始这个线程。

下面是我的代码。基本上,如果用户使用给定密码存在,我想要一个返回 true 的登录函数。下面的代码没有响应。

我是否使用参数引用错误地设置了 .execute?还是 if 语句错误?

def Login(username,password):

    cursor.execute('select %s from db') % username
    dbuser = cursor.fetchone()
    if dbuser == username:
        cursor.execute('select %s from db') % password
        dbpass = cursor.fetchone()
        if dbpass == password:
            return "True"
       else:
            return "Password is incorrect."

   else:
       return "Username is incorrect."

任何帮助是极大的赞赏!对不起,新手的问题......

4

2 回答 2

1

三件事...

首先,您使用的 SQL 没有任何意义。基本语法是select columns from table where stuff is true. 您正在尝试select <a username> from table用户名应该是没有任何意义的列名。我想你正在尝试更多类似的东西select username from db where password=%s

其次,告诉用户用户名不存在允许某人通过反复试验构建所有有效用户名的列表。相反,请笼统地告诉他们凭据不匹配,并且不要告诉他们哪个部分损坏了。

第三,您将用户输入(输入用户名和密码)直接嵌入到 SQL 中。请阅读SQL 注入并使用参数化查询来防止您的用户对您的站点做非常非常糟糕的事情。

编辑

最后的考虑。这一切都意味着您将密码以纯文本形式存储在表中。也对密码散列进行一些研究。

于 2012-03-22T19:57:26.780 回答
1

您正在尝试COLUMN从数据库中选择一个,它等于username传递给Login函数的变量。

你的语法完全不正确。

阅读SQL Select 上的这个PostgreSQL 链接以获得正确的语法。

本质上,您需要做的是从数据库中选择完整列(按列名),并添加一个使用或匹配变量的WHERE子句username

cursor.execute('SELECT username,password FROM db WHERE username=%s') % (username)

免责声明:以上是用于防止 SQL 注入的不安全代码。它只是为了帮助您理解要使用的正确语法,而不是当前问题所要求的。

于 2012-03-22T20:11:59.160 回答