如何降低MongoDB对象的可猜测性?
我正在运行一个应用程序,该应用程序的公共可用资源位于如何降低MongoDB对象的可猜测性?,mongodb,security,brute-force,objectid,Mongodb,Security,Brute Force,Objectid,我正在运行一个应用程序,该应用程序的公共可用资源位于 http://application.com/resource/**ObjectID** 这些资源需要公开访问(而不是在登录之后),但是我正试图减少黑客暴力强迫ObjectID并随意删除它们的可能性 我的想法是在每个MongoDB文档中包含一个随机生成的密钥,以便在发出请求时可以对其进行匹配。例如: http://application.com/resource/**ObjectID**/**键** http://application.co
http://application.com/resource/**ObjectID**
这些资源需要公开访问(而不是在登录之后),但是我正试图减少黑客暴力强迫ObjectID并随意删除它们的可能性
我的想法是在每个MongoDB文档中包含一个随机生成的密钥,以便在发出请求时可以对其进行匹配。例如:
http://application.com/resource/**ObjectID**/**键**
http://application.com/resource/**ObjectID**?key=**key**
甚至
http://**Key**.application.com/resource/**ObjectID**
如果密钥与文档中存储的密钥不匹配,则服务器将返回404
<强>我意识到在保证隐私的意义上这并不是真正的保护,因为如果中间有人嗅到URL,他们可以访问资源。< /强>我只是想阻止某人从蛮力的对象。
这种方法可行且有效吗?首先,在这里很难看到你的目标。资源应该是可公开访问的,同时您担心有人会猜到资源的位置。如果您将猜测应用程序中的objectid会导致问题的原因包括在内,可能会更好 我假设您正在尝试执行一些共享服务,允许交换数据(如通过文件共享的dropbox),并且您基本上试图保护ObjectID后面的数据
在这种情况下,您概述的方式没有问题,因此我将添加另一种方法:创建您自己的objectid(一些随机生成的长字符串)。一个潜在的问题是,它们可能会发生冲突,但此事件将非常罕见,因此,如果您将其包装为try-catch和redo-on-fail,您应该可以。在您在ObjectID生成中引用的原始答案的上下文中,Gustable被限定为“给定足够的时间” 我不会关注你的ID是否可以被蛮力猜测,而是会关注检测和缓解任何蛮力攻击的方法。这消除了让对手有足够的时间尝试所有可能的组合(无论您的ID格式如何,这种方法都可以工作)的问题 例如,检测暴力攻击的明显特征可能包括:
- 来自特定IP地址的大量404请求
- 对增量objectid的连续请求(应该很少)
- 无效的ObjectID(如果对手不知道预期的格式)