这与编码本身并没有真正的关系,我的项目是在 Laravel 7.1 中,但更多的是在 Outlook 的安全测量中。
基本上我有一个功能,可以发送一封包含按钮的电子邮件,它是一个带有令牌的链接,以及我的 Laravel 项目中用于执行某些操作的路线(在本例中是确认取消预约)。单击该按钮时,它会将用户重定向到显示一条消息的页面,显示预约已成功取消或令牌已过期(因为 ofc 执行该操作一次最终会从数据库中删除令牌,因此请尝试再次执行此操作)将失败并显示该消息)。
这在测试环境中按预期工作,单击 Gmail 中的同一按钮或复制并粘贴链接到浏览器地址栏中。
但是,对于 Outlook 及其带有安全链接保护的屏蔽链接,无法正常工作,一旦单击按钮,它会将用户重定向到过期的令牌消息,但操作按应执行的方式执行。
发生这种情况是因为 safelink 正在访问该链接并在让用户打开新选项卡之前检查它是否安全,问题是“假”访问使我的应用程序执行通常应该执行的操作:(它根据以下情况取消约会该令牌,并且它从数据库中删除该令牌),因此当用户被重定向时,即算作对该链接的第二次访问,并且用户输出的是过期令牌消息,这当然是误导性的。
对于任何一次使用链接来说,这基本上都是一个问题,并且可能会影响其他应用程序。
这是 Microsoft 最近的一项更改,尽管几个月前就已经开始工作了,safelink 并不是什么新鲜事,但他们引入了新的安全功能。其他邮件提供商也可能会发生这种情况,但我刚刚测试了 Gmail,它没有做同样的事情,但它有效。
所以我真的不知道我可以做什么来解决这个问题,有没有办法检测点击是否来自真实用户或其他什么? Laravel 是否采取了措施来克服这个问题?
提前致谢。
Safelink https://learn.microsoft.com/en-us/microsoft-365/security/office-365-security/atp-safe-links?view=o365-worldwide#safe-links-settings-for-email-messages保护发起一个HTTPHEAD https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/HEAD向网站请求其计划重写的 URL,然后重写电子邮件中的 URL 以通过 MS 平台退回。
许多 Web 应用程序处理 HEAD 请求,例如GET https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET要求。如果这种情况发生在一次性 URL 上,则 SafeLink 的 HEAD 请求会触发操作,这意味着当浏览器发出“真实”请求时,链接就会过期。
我为此使用的解决方案是检查传入请求上使用的 HTTP 方法,并且仅在它是 GET 时才对其执行操作;返回一个405 不允许的方法 https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405状态或类似的内容(如果是其他内容)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)