如何检查来自用户收件箱的网页请求

Posted

技术标签:

【中文标题】如何检查来自用户收件箱的网页请求【英文标题】:How to check a web page request came from user inbox 【发布时间】:2014-10-18 23:07:03 【问题描述】:

我有一个向订阅者发送下载链接的网络应用程序。订阅者可以单击收件箱中的链接并获得下载 pdf 文档的权限。很好,但我想要的是仅在从他的收件箱中单击链接时才允许访问 pdf 文档。我的意思是,如果订阅者将此电子邮件转发给其他人或尝试手动将链接粘贴到浏览器中,它应该不起作用。

【问题讨论】:

在 URL 上放置一个令牌或与他们的帐户匹配的唯一内容 您可以使用nonce - 另请参阅nonce => ***.com/a/4145848 【参考方案1】:

你想要的都是不可能的。

考虑这种情况:您发送电子邮件至某人@example.com。他们可以通过以下方式查看电子邮件:

a) 桌面邮件客户端 b) 智能手机/平板邮件客户端 c) 网络邮件

这三个在您的服务器上都会显示为“不同”,具体取决于他们在哪个客户端中单击了您的链接。如果用户将电子邮件转发给其他人,例如otherperson@example.com,则完全相同的链接将在其中人的邮件文件,他们可以通过完全相同的选项查看它。

可能能够从他们使用 webmail 的参考 IF 中提取用户名或其他一些个人身份数据,而 webmail 系统愚蠢到可以拥有webmail.example.com/readmail?userid=someone

但除此之外,不,您不能假设任何关于传入点击的信息,只能假设有人点击了某封电子邮件中的链接。

【讨论】:

这三个对你的服务器来说都“不同”——它们更有可能看起来都一样(彼此以及链接转发给的任何人) )。 而且网络邮件系统已经够笨了——而且不使用 SSL(因为浏览器会阻止来自它的传出引用者) 有人点击了某封电子邮件中的链接——你甚至无法分辨。您可以判断请求中是否没有引用标头。 @Fred-ii-:那有什么好处?我收到电子邮件,我将其转发给其他人,而无需点击它,那个人点击了,他们就进来了。 真的,真的。 但是,那会先教转发邮件的人,之后他/她自己就无法做到了; 射他/她自己的脚。 ;)【参考方案2】:

无法判断链接是从电子邮件客户端打开还是粘贴到地址栏中。无法跟踪电子邮件是否已被转发(html 格式电子邮件中的 webbug 图像被大多数电子邮件客户端阻止)。

如果你想限制谁可以从你的服务器下载文件,那么要求用户登录,然后希望他们没有人参与密码共享。

即使这样也不会阻止他们直接重新分发文件。

【讨论】:

感谢昆汀的回复!实际上我在想,可能是我错了,如果是,请纠正我,有没有办法在电子邮件发送到订阅者的收件箱时获取与特定电子邮件地址或收件箱等相关的任何类型的信息?如果可能的话,我可以将此信息保存在数据库中,以便随时识别来自同一收件箱的请求。可能是我想错了方向,但我不确定。谢谢。 您可以向每个用户发送一个唯一的链接。这不会告诉你点击链接的人的地址,只会告诉你最初发送链接的地址。【参考方案3】:

实际上不可能“保护”一个链接。

但如果您的 Web 应用程序需要用户登录,您可以为每个用户生成一个唯一的链接,并要求他在允许下载之前登录。

与简单的网址相比,人们不太愿意分享他们的登录名/密码。

【讨论】:

感谢您的回复芬林!实际上我在想,可能是我错了,如果是,请纠正我,有没有办法在电子邮件发送到订阅者的收件箱时获取与特定电子邮件地址或收件箱等相关的任何类型的信息?如果可能的话,我可以将此信息保存在数据库中,以便随时识别来自同一收件箱的请求。可能是我想错了方向,但我不确定。谢谢。【参考方案4】:

我知道这是一个老问题,我不确定为什么它被否决了,但我想到了一个想法。如果您在电子邮件中放置一个通用像素跟踪器,并带有一个标识用户和电子邮件版本的令牌,当请求时,您的服务器会记录电子邮件被打开和阅读(以及连续阅读)的时间。然后,如果用户单击电子邮件中的链接,则链接上的标记会标识相同的用户和电子邮件版本。当服务器收到此请求时,它可以将其与上次访问匹配跟踪像素的时间进行比较。如果在请求链接前几分钟内访问了像素,则表示电子邮件已打开,然后链接已被点击。

如果用户书标记了链接并在第二天使用它,则不会有最近的跟踪像素历史记录,这意味着请求不是来自收件箱。

这很容易被欺骗,因此不应该用于任何安全问题。您不会知道该电子邮件是否已转发给其他人。他们的电子邮件客户端也会命中跟踪像素。

许多电子邮件客户端会因为越来越多的隐私问题而阻止像素跟踪,因此它不可靠。

如果您只是在寻找使用情况的指示,这可能会奏效。

【讨论】:

以上是关于如何检查来自用户收件箱的网页请求的主要内容,如果未能解决你的问题,请参考以下文章

如何为用户的收件箱和日历资源同步客户端

接受请求后 Outlook 日历从收件箱中消失

使用 Socket.io 的通知 - 如何发送给特定的用户/收件人?

扫描非默认 Outlook 收件箱以查找电子邮件?

网页邮箱收件箱被清空

使用带有 C++ 的 MAPI,我如何打开另一个用户的收件箱?