我的网站使用模糊的随机网址为敏感文档提供一些安全保护。例如。网址可能为http://example.com/<random 20-char string>
。这些网址不会被任何其他网页链接,只有META
个标记可以选择退出搜索引擎抓取,并且会有较短的到期时间。对于顶级安全性,某些URL也受到登录提示的保护,但许多URL仅受隐藏URL的保护。我们已经确定这是一个可接受的安全级别。
我们实施了一个锁定机制,在几次无效的网址尝试后,IP地址将被阻止一段时间,以阻止对网址进行暴力猜测。
但是,谷歌浏览器有一个名为“即时”的功能(在选项 - &gt;基本 - &gt;搜索中启用),可以在地址栏中输入网址时预取网址。这很快就会触发锁定,因为它会尝试获取一堆无效的URL,并且在用户完成时,不再允许他们进行锁定。
(说实话,我真的不明白这对Chrome来说是一个有用的功能。对于搜索结果,看到Google在您输入内容时的建议会很有趣,但是您的预期网址的一部分会有多大的可能性产生一个有意义的页面?当我打开这个功能时,我得到的是一堆404错误,直到我完成输入。)
答案 0 :(得分:2)
在没有评论目标的情况下,我遇到了类似的问题(从Chrome Instant加载了不需要的网页),并发现Google does provide a way to avoid this problem:
当Google Chrome向您的网站服务器发出请求时,它会发送以下标题:
X-Purpose: preview
检测到这一点,并返回HTTP 403(“禁止”)状态代码。
答案 1 :(得分:0)
或者这种锁定机制对于没有提供任何重要保护的用户来说是愚蠢和恼人的吗?
你可能在那里砸了钉子:通过默默无闻的安全不是安全。
不要试图“阻止蛮力猜测”,而是使用实际难以猜测的URL:显而易见的例子是使用加密安全的RNG来生成“随机20个字符串”。如果你使用base64url(或类似的URL安全base64),你得到64 ^ 20 = 2 ^ 6 ^ 20 = 2 ^ 120位。不是128(或160或256)位,所以你可以让它更长,如果你想,但也要注意正确猜测的预期带宽成本将是巨大的,所以你不必担心,直到你带宽费用变得巨大。
您可能还需要一些其他方法来保护链接:
Referer:
,泄漏您之前查看的“安全”网址) 。另一种方法是将初始加载设置为不可取的secure
会话cookie,并重定向到仅对该会话cookie有效的新URL。或者,您可以在不影响可用性的情况下将“锁定”更改为仍然有效:
即使初始延迟呈指数增长(即1s,2s,4s),“当前”延迟也不会比输入整个URL所花费的时间长得多。如果输入一个随机URL需要10秒钟,那么等待它加载的另外16秒也不错。
请记住,想要绕过基于IP的速率限制的人可以租用(僵尸网络带宽的一小部分)僵尸网络。
顺便说一句,我(仅略微)对未命名的澳大利亚软件公司的观点感到惊讶,即低熵随机生成的密码不是问题,因为您的登录系统中应该有一个CAPTCHA。很有趣,因为其中一些密码是服务器到服务器。