为啥 SQL "WHERE" 从表中返回值是小写的? [复制]
Posted
技术标签:
【中文标题】为啥 SQL "WHERE" 从表中返回值是小写的? [复制]【英文标题】:Why is SQL "WHERE" return value from table lowercase? [duplicate]为什么 SQL "WHERE" 从表中返回值是小写的? [复制] 【发布时间】:2021-11-05 23:01:58 【问题描述】:对不起,如果我的问题令人困惑。
我查询时为什么会这样
SELECT email FROM users WHERE email = 'some-email@email.com' AND password = 'pass134';
我正在使用带有 SQL 的 Node.js 服务器,当我使用时:
app.get('/login', function(req, res)
var params = '?' + req.url.split('?').pop(); // "?email=test@test.net&pass=13456"
const pass = (new URLSearchParams(params).get('pass')); // "13456"
connection.query(`
SELECT email FROM users WHERE email = '$email' AND password '$pass';
`, function(err, result)
if (err) throw err;
if (typeof result[0].email != "undefined")
// User logged in successfully
else
// The email/password is incorrect
);
);
我尝试访问 https://www.example.com/login?email=test@test.com&pass=Pass13456,它会登录。
但是当密码为小写或大写时,它仍然可以登录。
我认为这是 WHERE
查询不够具体。
如何使 SQL 选择值以 WHERE 作为特定值?
(例如,WHERE str = 'only equal to this string, not lowercase or uppercase';
)
【问题讨论】:
mysql 默认不区分大小写。 你不应该在数据库中存储明文密码。 ***.com/questions/5629111/… @PM77-1 非常感谢。正是我想要的! @Ivar 这只是我的代码示例。显然这是一个安全问题,我从事网络安全工作。 【参考方案1】:因此,mysql 中的 where 子句不区分大小写。要修复它,您可以从查询中返回密码,将其作为变量保存在节点中,然后进行比较(一种解决方案)
或者您可以使用二进制比较。我仍然需要对此进行测试,但我相信您只需将“BINARY”关键字添加到您的查询中。很喜欢
SELECT email FROM users WHERE email = 'some-email@email.com' AND BINARY password = 'pass134';
我在手机上写这个,所以我不知道这是否是最好的,我仍然需要测试二进制解决方案
【讨论】:
谢谢!我从来不知道 SQL 是不区分大小写的。 SQL 通常区分大小写 - 这是 MySQL 的一个奇怪之处以上是关于为啥 SQL "WHERE" 从表中返回值是小写的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
sql动态拼接:为啥select count(*) where条件后面<if test="">不起作用?
为啥Entity Framework没有在使用SingleOrDefault时生成的SQL中添加“where”?
Oracle/SQL:为啥查询“SELECT * FROM records WHERE rownum >= 5 AND rownum <= 10” - 返回零行
为啥“WHERE”查询不能在 php 中使用 SQLITE [重复]