使用 MongoDB 生成的 _ids 作为“秘密数据”(例如,OAuth 令牌)

2024-01-19

是 MongoDB_id字段足够随机/不可猜测来充当秘密数据?

例如:如果我正在构建服务器端 OAuth,我可以使用 _id 作为用户的 OAuth 令牌吗?我想这样做是因为它为数据库提供了清洁性和可索引性(例如,“tokens._id”=> oauth_token)。

检查 MongoDB _id 对象的结构,它们似乎确实是相当随机的,但我确实对恶意实体暴力猜测有一些挥之不去的担忧。


简而言之,不。蒙戈ObjectIds很容易猜到。特别是,在高负载下,这些通常是连续的数字,因为时间戳、机器和进程 ID 不会改变。如果你看Objectid的结构 http://docs.mongodb.org/manual/core/object-id/,它们由

a 4-byte timestamp, 
a 3-byte machine identifier, 
a 2-byte process id, and 
a 3-byte counter, starting with a random value.

因此,它们的随机性很小。我经常在数据库中看到连续的 ID,例如,如果某个控制器操作快速连续写入域对象和日志条目。

如果可以猜测时间戳并且可以确定机器 ID(除非您有一个巨大的集群),则只剩下 5 个字节。通过查看许多生成的 id,我可能可以将其减少到 50 个进程,因此有效熵在 28 位范围内。这仍然很难猜测,但对于访问令牌来说风险太大。

请改用加密强度高的伪随机数生成器,并从中创建令牌。例如,在 .NET 中,RNGCryptoServiceProvider允许创建任意长度的随机数据。

附带说明一下,我建议在 OAuth 令牌周围添加一个额外的加密包装器,原因有两个:

a) 您希望能够快速确定无效令牌。有效的加密 shell 可能仍包含无效令牌(已撤销或过期的授权),但您不必每次都通过暴力攻击攻击数据库。另外,客户

b) 客户端可以一遍又一遍地请求令牌。虽然这不是必需的,但我知道的几乎所有系统每次都会返回不同的令牌(无论它们是否自我验证)。通常,这是因为令牌本身的有效期有限。这与 OAuth 授权的有效期不同。

在数据库中,您真正想要存储的是授予,即某个用户授予某个客户端的权限。如果删除此授予,所有令牌都将变得无效。每次插入新令牌非常不方便,因为用户必须删除所有令牌才能有效删除应用程序授权。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MongoDB 生成的 _ids 作为“秘密数据”(例如,OAuth 令牌) 的相关文章

  • mongodb 通配符匹配特定键的所有值[重复]

    这个问题在这里已经有答案了 我试图弄清楚如何匹配一个键并返回该键的所有值 是否可以将值作为通配符给出 我想在值上使用通配符返回该特定键的所有内容 db collection find key 我还希望这也能返回整个集合 其中的键也与通配符值
  • 为什么 Casbah / Java MongoDB 驱动程序最终会出现 java.lang.IllegalArgumentException?

    我使用时看到一个奇怪的问题casbah java driver 当驱动程序尝试从 mongo 创建响应时 我不断遇到以下异常 Oct 16 2012 10 45 07 AM com mongodb DBTCPConnector MyPort
  • 为什么我在 Nodejs 中收到“在将标头发送到客户端后无法设置标头”错误?

    我正进入 状态 Cannot set headers after they are sent to the clientNodejs 中出现错误 我无法弄清楚原因 代码如下 我正在使用 mongoose 将数据保存在 mongodb 中 我
  • Mongoose:转换为 ObjectId 失败

    我正在尝试在 MongoDB 中创建一个类别层次结构 以便通过 Mongoose 与 Node js 一起使用 我正在使用祖先数组方法 http docs mongodb org manual tutorial model tree str
  • 将位置数据存储在 Mongodb 文档中

    在我当前的项目中 我将位置数据以以下格式存储在 Mongodb 文档中 location loc lng 118 15592692 lat 34 03566804 geocode city East Los Angeles state CA
  • 如何在 mongodb-native findAndModify 中使用变量作为字段名称?

    在使用 mongodb native 驱动程序的这段代码中 我想增加在单独变量中指定的字段的值 问题在于 在这种情况下 inc 子句中的字段名称将是 变量 而不是变量的内容 在查询部分中 所选变量按预期工作并找到正确的 ID var sel
  • 将 mongo 数组转换为具有键值对的对象

    我有一个包含字符串数组的 mongo 文档 我需要将这个特定的字符串数组转换为包含键值对的对象数组 以下是我目前的做法 id ObjectId 57e3720836e36f63695a2ef2 platform A1 available C
  • Mongoose查询结果是只读的吗?

    如何修改 Mongoose 查询返回的对象 假设我们有以下模式 var S new mongoose Schema name String field String 我对结果进行了以下查询和修改 var retrieve function
  • 使用 PyMongo 将 MongoDB find() 返回序列化为非匿名 JSON 数组

    我的 Python 代码查询 MongoDB 并返回an array以下对象 u attribute u value u id ObjectId 534776c66e5987041f6154bd 我想要实现的是返回以下 JSON mycol
  • ElasticSearch 和 PHP 中的多个字段搜索

    我正在使用最新版本弹性搜索 PHP https github com elasticsearch elasticsearch php以及最新版本的 MongoDB 和 ElasticSearch 我需要对可以包含一个或多个值的多个字段进行搜
  • mongodb 更新所有文档,并将值增加 1 [重复]

    这个问题在这里已经有答案了 我在 mongoDB 中有几个文档 文档结构是这样的 a abc myid 2 我想用 1 更新所有文档的 myid 例如 第一个文档 myid 1 第二个文档 myid 2 依此类推 有询问吗 尝试这个查询 d
  • 多文档事务在使用 mongodb 4.08 社区服务器的 C# 中不起作用

    我需要使用 mongodb 事务更新多个文档 mongodb 社区服务器版本是 4 08 net 的 mongodb 驱动程序是 2 9 beta 也尝试过 2 8 从调试中 我可以看到它执行了 session AbortTransacti
  • mongodb 正在运行吗?

    我已经在我的 Unix 服务器上安装了 Mongodb 和 PHP 驱动程序 我的问题是如何判断 Mongodb 是否正在运行 是否有一个简单的命令行查询来检查状态 如果我从外壳程序启动一次 如果我退出外壳程序 它会继续运行 情况似乎并非如
  • 环回关系不填充对象 ID 数组

    到目前为止我有 2 个模型 工作流程核心 工作流程步骤 工作流核心有一个steps属性 该属性是数组类型并且包含1 多个步骤 当呼叫接通时工作流程核心响应正文不会使用实际步骤对象填充步骤数组 工作流程核心 json name workflo
  • 为 MongoDB 中的对象数组建立索引

    我有一个巨大的电子邮件转储 我正在尝试在 MongoDB 中存储和查询它 有 160 万封电子邮件 每封电子邮件都存储为节点模块 https github com andris9 mailparser它将原始电子邮件解析为漂亮的 Javas
  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • 将 Django +1.10 与 MongoDB 连接

    在过去的几个月里 有人为 MongoDB 更换了 Django 1 10 中的默认数据库引擎吗 我在谷歌上得到的所有信息都是六四年前的 最常见的结果包括mongodb 引擎这需要Django nonrel 来自 Django 1 5 的一个
  • 为关联数组选择哪种映射类型?学说ODM

    我有一个关于 顺便说一句 真的很棒 Doctrine ODM 的简单问题 假设您有一个类似以下的文档 Document class Test Id public id WHICHTYPE public field array 现在我想存储一
  • $unwind聚合框架中的对象

    在 MongoDB 聚合框架中 我希望在对象 即 JSON 集合 上使用 unwind 运算符 看起来不像是这样possible http docs mongodb org manual reference aggregation S un
  • 国外收藏的查找和排序

    所以我有一个收藏users 并且此集合中的每个文档以及其他属性都有另一个集合中文档的 id 数组 workouts 集合中的每个文档workouts有一个名为date 这就是我想要得到的 对于特定用户 我想要获取属于该用户的锻炼的 work

随机推荐

  • IIS Express 7.5 wwwroot 目录在哪里

    使用 Windows 7 我已经安装了 IIS Express 7 5 但我找不到wwwroot我系统上的目录 没有 inetpub我的 C 盘上也有 文件夹 您能否让我知道在哪里可以放置要运行的文件 例如 hello aspx 文件 Th
  • 如何检索当前为微调器设置的阵列适配器?安卓操作系统、机器人

    希望创建一个菜单切换器 在旋转器的两个可能的数组之间切换 例如 如果微调器设置为显示数组 A 那么当我按下此菜单按钮时 我希望将微调器设置为数组 B 如果我再次按下它 我希望将其设置回数组 A 我可以处理 if then 语句等 但如何调用
  • 子网格缓存或阻止子网格数据被删除 (jqGrid)

    有没有办法强制 jqGrid 在切换行时不删除子网格数据 我当前加载数据网格的过程如下 1 设置主网格 使用稍后可以使用的 ID 以编程方式设置子网格 2 通过json将数据本地加载到主网格中 3 通过json将数据添加到本地子网格 由于当
  • Wicket 和 CSS 资源

    我环顾四周 找不到将我自己的 CSS 添加到 Wicket 网站项目的傻瓜指南 但在开始之前 我对正确的 java 开发还很陌生 所以当我说 傻瓜指南 时 我是认真的 非常感谢这里对我简单明了的解释 我从这里开始阅读本指南 http wic
  • Spring Integration - 变压器和标头丰富器

    我的情况是这样的 我需要根据邮政编码将消息路由到三个不同的商店 为此 我需要查看邮件标头以查找客户的邮政编码 并执行以下计算 if zip lt 5000 store SJ else if zip gt 6000 store JY else
  • 为什么 Clojure 的多方法比“if”或“case”语句更好

    我花了一些时间试图理解 Clojure 多方法 据我了解 主要的 专业 多方法论点是它们的灵活性 但是 我对为什么多方法比简单的 if 或 case 语句更好的争论感到困惑 请有人解释一下 多态性和过度美化的案例陈述之间的界限在哪里 编辑
  • 了解 Cassandra 的存储开销

    我一直在阅读本节 http www datastax com documentation cassandra 2 0 cassandra architecture architecturePlanningUserData t html查阅
  • 如何以编程方式设置layout_margin? [复制]

    这个问题在这里已经有答案了 我想知道如何使用屏幕高度和宽度以编程方式设置layout marginLeft layout marginTop layout marginBottom 请帮我 谢谢 莫纳利 这是一个例子 改编自这个答案 htt
  • iOS 应用程序在 iOS 12 上编译器生成的代码中崩溃

    我最近发布了一个用 Swift 4 2 编写的 iOS 应用程序的新版本 Crashlytics 报告该应用程序在编译生成的代码中崩溃了 30 多次 我查看了项目中的类 并尝试重现崩溃 但未成功 有谁有办法解决编译器生成的代码中发生的崩溃吗
  • ASP .NET Core 2.0 将“localhost”更改为“主机名”

    我有一个基于MVC框架编写的Web应用程序 它在本地主机和默认端口 51290 上运行得非常好 现在我需要使用我的域名运行它 例如我的主机名 我尝试的是在 applicationhost config 部分添加一行
  • 从后台返回时 AVCaptureSession 失败

    我有一个相机预览窗口 90 的时间都运行良好 然而 有时 当返回我的应用程序时 如果它位于后台 预览将不会显示 这是我在视图加载时调用的代码 void startCamera session AVCaptureSession alloc i
  • SearchView getActionView 返回 null

    前几天还可以用 但是突然就停止了 我只想在某些片段可见时使用操作栏搜索小部件 现在我无法获得SearchView now getActionView总是返回 null 可搜索 xml
  • 使用 php 和 mysql 发送提醒电子邮件而不使用 cron-job?

    我刚刚制作了一个 php 脚本 它将在约会开始前 2 天向网站管理员发送电子邮件提醒 我本来打算自动化脚本来运行 cron 作业 却发现我托管的人 疯狂的域 似乎没有 Cron 作业 有没有办法在没有 cron jobs 的情况下做到这一点
  • 转置没有聚合的行和列

    我有以下数据集 Account Contact 1 324324324 1 674323234 2 833343432 2 433243443 3 787655455 4 754327545 4 455435435 5 543544355
  • 如何在此 Builder 实现中摆脱 instanceof

    The idea 我需要创建命令 命令可以配置参数 并非每个命令都可以接收相同的参数 所以有些必须被忽略 我有一个抽象类 Command 其中定义了一个 Builder 默认情况下 每个附加参数都会抛出 UnsupportedOperati
  • 在 pandas 中使用带有元组列的查询

    我有一个 pandas df 其中一列作为元组 我想用query使用元组的第一个条目对 df 进行子集化 最好的方法是什么 我在 pandas 23 3 Python 3 6 6 MWE import pandas as pd df pd
  • Gitlab-ci.yml 创建合并请求

    我在 DEV 分支中运行以下 gitlab ci yml 文件 目标也为 DEV 由于我无法将 TARGET 指向 MASTER 因此不会自动创建 MR 我想知道是否可以在 gitlab ci 脚本本身中创建合并请求 dev stage d
  • 拉力赛中的速度图[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开展一个项目 从拉力赛中提取数据并创建速度图表 我了解要使用的 REST Web 服务 API 是缺陷 迭代 分层需求和迭代累积
  • 具有 IDisposable 的无限状态机

    假设我有一个无限状态机来生成随机 md5 哈希值 public static IEnumerable
  • 使用 MongoDB 生成的 _ids 作为“秘密数据”(例如,OAuth 令牌)

    是 MongoDB id字段足够随机 不可猜测来充当秘密数据 例如 如果我正在构建服务器端 OAuth 我可以使用 id 作为用户的 OAuth 令牌吗 我想这样做是因为它为数据库提供了清洁性和可索引性 例如 tokens id gt oa