我开发了一个具有"演示页面"的web应用程序。其中一条业务规则是取消试用用户的登录/密码功能,同时要求用户拥有有效的电子邮件来启动试用并单独记录用户的所有操作。
在我看来,这很简单:让我们只使用URL中的"令牌"作为参数。我们要求用户输入电子邮件,然后用生成的令牌发送访问链接——很像API,但我们显示的是带有JS的HTML,而不是JSON和XML。我心里也是一样。
像这样:https://www.example.com/trial?token=abcdef123456
它运行得很好,直到我注意到谷歌用一个有效的令牌为我们的一个访问链接建立了索引。怎样
对我来说,这很奇怪。多年来,我们的API都使用相同的功能——在URL中传递访问令牌。谷歌和微软的API就是这样工作的。唯一的区别是我返回的是HTML而不是JSON。
我们有数字证书,HTTPS和SSL/TLS加密。我们使用RNGCryptoServiceProvider来生成安全令牌。我们只通过安全通道(电子邮件或https网站内)发送代币。
可能发生了什么?我能做些什么来防止它?
我的猜测:也许是谷歌浏览器?
很可能您的一个客户,您向其发送了带有嵌入令牌的访问URL,最终将其发布到论坛/博客/页面,该页面最终被索引。
场景:例如,我通过电子邮件获得了你的URL,并决定在博客上发布你的服务有多酷,并列出URL让人们看一看。谷歌机器人会抓取我的博客页面,查看你的链接,访问它,然后根据该页面上的所有相关关键词对其进行索引。接下来,当搜索与您的网站/业务相关的关键词时,此URL将显示为搜索结果。
自检:尝试在谷歌上搜索确切的URL,以显示任何可能列出它的页面。
补救:robots.txt
为什么JSON API不发生这种情况:API是用于机器消费的。开发人员知道API密钥的重要性。除非开发人员足够粗心/愚蠢,在博客上发布带有API密钥的API端点,否则这种情况不太可能发生。
如果是"演示"链接,业务人员可能不知道他是否不应该转发此链接,除非您在电子邮件中声明。