我正在进行一个简单的登录,并且有一个名为Users的表。我正在尝试使用POST body登录表单,并在整个数据库中进行验证。在
表单中的值:
user = request.form['username']
password = request.form['password']
SQL语句:
^{pr2}$用户表:
因此,对于来自我的表单的POST
请求,打印内容如下:
Print(user, password) = ph104694 Password123
Print(row) = None
因此,当数据绝对存在时,可以看到该行被返回为None
。如果我把user
改成我知道不正确的东西,我会得到同样的结果,但是如果我把表从Users
改成类似{no table exists
错误,这很好。因此,尽管匹配数据存在,但我的语句中的某些内容不允许它生成该行。有什么想法吗?在
查询字符串的计算结果为
"SELECT * FROM Users WHERE Username LIKE '(ph104694)'"
。在注意括号中没有实际用户名。在
另外,您几乎肯定不想使用
LIKE
。在你想要的是
"SELECT * FROM Users WHERE Username = 'ph104694'"
它将使用
"SELECT * FROM Users WHERE Username = '{user}'".format(user=user)
创建另外,您可以(也应该)将其参数化为
您的搜索表达式的求值结果是
(ph104694)
,显然在您显示的数据中,并不存在于。这里没有理由使用LIKE运算符,它可能与您想要的操作背道而驰(匹配与输入的用户ID完全匹配的单个记录)。
这是遭受SQL注入攻击的典型代码示例。你不应该,永远,永远不要使用字符串插值来构建这样的SQL字符串。相反,请使用参数替换。
总而言之,你想要这样的东西:
相关问题 更多 >
编程相关推荐