首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以将MySQL的类型转换配置为考虑0 !=“foo”吗?

我可以将MySQL的类型转换配置为考虑0 !=“foo”吗?
EN

Database Administration用户
提问于 2013-03-06 14:48:18
回答 1查看 715关注 0票数 3

这篇文章指出了MySQL的以下安全问题:

代码语言:javascript
运行
复制
USERS
id | email            | password_reset_token
1  | one@example.com  | QTlXww)uV!Hdg3U6aGwKV2FPvAqzVgPx
2  | two@example.com  | CZor5t7WbX#LTeqiG3v@6f3@z#)BfK*n

在这里,我们有一个很好的,随机的标记,用户必须证明他们有,以重置他们的帐户。但是用户设法提交了0的重置令牌,因此我们运行以下查询:

代码语言:javascript
运行
复制
SELECT * FROM `users` WHERE `email` = 'one@example.com' AND `password_reset_token` = 0

为了进行比较,MySQL将令牌VARCHAR转换为INT。它考虑不以数字开头的VARCHAR等于0。因此,攻击者可以匹配任何非数字字符串并接管帐户.

即使重置令牌启动了一些数字,情况也不会好多少。MySQL在进行此比较时忽略了所有字符,但忽略了初始值,因此它认为12blahblah3blah4等于12,这使得猜测变得更加容易。

我可以将MySQL配置为不进行这种类型的类型转换吗?例如,如果它将INT转换为VARCHAR而不是反之亦然,则此攻击将无法工作。

Note

如果查询是用'0'而不是0运行的,这是行不通的。本文从Rails接受XML的角度讨论了这个漏洞,其中type=integer属性说服Rails在查询中发送一个实际整数。

该bug已在Rails中得到修补;它现在将所有请求参数转换为字符串,因此它将永远不会构建带有整数的查询。但我仍然认为MySQL应该是可配置的,以防止出现这种情况。

EN

回答 1

Database Administration用户

发布于 2013-03-06 16:38:09

首先,如果您的结束查询是这样生成的,这似乎意味着您直接输入用户并将其粘贴到查询模板中,这本身就是sql注入的问题。此外,即使您这样做,查询模板需要在引号中,才能使charish输入的合法请求在语法上有效。

无论您的应用程序使用什么语言,ruby或其他语言,都会查找它们如何进行参数化查询和准备好的语句。API将为您处理所有正确的转义。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/36078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档