电子邮件中的 URL 是否被搜索引擎索引以便公开搜索?

Are URLs in emails indexed by search engines so they become publicly searchable?

我在这里阅读了一些关于电子邮件客户端在电子邮件中预取 URL 的问题。对此的答案似乎是添加一个新的确认页面,用户必须在其中单击按钮以确认所需的操作。

但是,this 回答如下:

As of Feb 2017 Outlook (https://outlook.live.com/) scans emails arriving in your inbox and it sends all found URLs to Bing, to be indexed by Bing crawler.

This effectively makes all one-time use links like login/pass-reset/etc useless.

(Users of my service were complaining that one-time login links don't work for some of them and it appeared that BingPreview/1.0b is hitting the URL before the user even opens the inbox)

Drupal seems to be experiencing the same problem: https://www.drupal.org/node/2828034

我最关心的是这个声明:

As of Feb 2017 Outlook (https://outlook.live.com/) scans emails arriving in your inbox and it sends all found URLs to Bing, to be indexed by Bing crawler.

如果是这种情况,电子邮件中的任何 URL 都意味着确认某项操作,例如确认登录、订阅或取消订阅,最终可以在搜索引擎中搜索到,如果这是上面引用中 indexed 的意思的话。在本例中,它是 Bing。即使是用户确认所需操作的专用确认页面也不能真正缓解这种情况。

场景 #1

如果我通过 URL 中的一次性令牌向用户发送登录名 link,那么 URL 将在 Bing 中结束。这个令牌的生命周期很短,比如说 5 分钟,所以我怀疑有人会设法在 Bing 上搜索并在用户单击它或它过期之前找到 URL。

场景 #2

用户收到一封带有 link 的电子邮件以确认订阅。这个 link 可能在 24 小时内有效。这可能(?)足以让其他人在搜索引擎上偶然发现 link 并意外(或故意)代表用户确认订阅。

情况 #2 并不少见,据我所知,使用双重选择加入甚至是最佳做法。

场景 #3

取消订阅新闻通讯底部的 URL。也许永远有效?您不希望在搜索引擎中公开搜索此内容。

假设所有一次性确认 link 都出现在用户确认所需操作的确认页面上。

电子邮件中的 URL 至少 Bing 被搜索引擎编入索引真的是个问题吗?他们真的会最终公开搜索吗?如果不是,上面引用中的 indexed 是什么意思?

为了完整起见,我要补充一点,我认为在我自己使用网络时对此没有太大问题,所以我的直觉是这种情况不太可能发生。

Is it truly the issue that URLs in e-mails are indexed by search engines, at least Bing?

我不能肯定地说它们是否被编入索引,只有 Bing 可以回答这个问题,但它们肯定会被访问,至少是通过一个简单的 GET 请求。我刚刚测试了这个发送一个 link 到我网站上记录针对它的请求的页面,实际上我看到一个 GET 来自 207.46.13.181 (反向 DNS 说 msnbot-207-46-13-181.search.msn.com),这表明来自 search.msn.com 的自动化程序正在抓取 link。这让我相信是的,他们正试图以某种方式索引 link 的内容,但这只是我的意见。

And will they actually end up publicly searchable? If not, what is meant by "indexed" in the quote above?

好吧,再一次,除非你为 Bing 工作,否则不可能说。在任何情况下,"indexing" 的意思都与您所想的完全相同:解析页面内容以可能将其包含在搜索结果中。


这里真正的问题是:这在某种程度上代表安全问题还是会危及我网站的功能?

它肯定有潜力:如果您的 confirmation/reset/subscription/whatever 进程仅依赖于 具有适当 GET 参数的单个 GET 请求,那么您绝对应该重新审视该策略,因为它显然允许 任何人 执行该操作(甚至是恶意的,例如为您的 GET 参数枚举可能的 ID)。

如果您尝试发送的 link 包含敏感信息或可用于更改您网站用户的重要数据,那么您至少应将其放在仅允许访问的登录页面后面感兴趣的用户。这样,任何想要访问它的人(包括搜索引擎)都将被重定向到登录页面(如果尚未登录)。

如果您尝试发送的 link 只是某种无害的确认 link(例如来自时事通讯的 subscribe/unsubscribe),那么至少使用网络内的表格页面通过 POST 请求(可能还使用 CSRF 令牌)进行实际确认,否则您将明确地以误报告终。