单击电子邮件中的 Outlook 安全链接保护链接似乎执行了两次代码

这与编码本身并没有真正的关系,我的项目是在 Laravel 7.1 中,但更多的是在 Outlook 的安全测量中。

基本上我有一个功能可以发送一封包含按钮的电子邮件,它是一个带有令牌的链接和我的 Laravel 项目中执行某些操作的路由(在本例中,确认取消约会)。单击该按钮时,它会将用户重定向到一个显示消息的页面,该页面显示约会已成功取消或令牌已过期(因为执行操作一次最终会从数据库中删除令牌,因此请尝试再次执行此操作将失败并显示消息)。

这在测试环境中按预期工作,单击 Gmail 中的相同按钮或复制并粘贴浏览器地址栏中的链接。

但是对于 Outlook 及其带有安全链接保护的屏蔽链接,无法正常工作,单击该按钮后,它会将用户重定向到过期的令牌消息,但操作已按预期执行。发生这种情况是因为 safelink 正在访问该链接并在让用户打开新选项卡之前检查它是否安全,问题是“假”访问正在使我的应用程序执行它通常应该执行的操作:(它取消了基于该令牌,并从数据库中删除令牌),因此当用户被重定向时,这被视为对该链接的第二次访问,并且用户输出的是过期令牌消息,这当然是误导性的。

这基本上是任何一次使用链接的问题,并且可能会影响其他应用程序。

这是 Microsoft 最近的一项更改,因为它在几个月前就开始工作了,safelink 并不是什么新东西,但他们引入了新的安全功能。其他邮件提供商也可能会发生这种情况,但我只是用 Gmail 进行了测试,它没有做同样的事情并且它有效。

所以我真的不知道我能做些什么来解决这个问题,有没有办法检测点击是否来自真实用户或其他什么?Laravel 是否采取措施来克服这个问题?


ibeautiful
浏览 153回答 3
3回答

慕妹3242003

Safelink保护向网站发起 HTTP HEAD请求以获取其计划重写的 URL,然后重写电子邮件中的 URL 以通过 MS 平台反弹。许多 Web 应用程序处理 HEAD 请求,如GET请求。如果这种情况发生在一次性 URL 上,则 SafeLink 的 HEAD 请求会触发操作,这意味着当浏览器发出“真实”请求时,链接已过期。我为此使用的一个解决方案是检查传入请求中使用的 HTTP 方法,并且仅在它是 GET 时才对其进行操作;如果是其他情况,则返回405 Method Not Allowed状态或类似状态。

POPMUISE

这种行为已经存在了一段时间。您能做的最好的事情就是提供一个页面链接,用户必须在该页面上明确单击另一个链接或按钮。

慕侠2389804

我已经有几天遇到这个问题了。通过反复试验,我刚刚通过自己的测试找到了解决方案,您只需要使用您的 outlook 帐户设置SMTP配置。使用 PHPMailer我之前有这个配置$trans = Swift_SmtpTransport::newInstance()          ->setHost("xxxxxxxxxxx.mail.protection.outlook.com")          ->setPort(25);我改为$trans = Swift_SmtpTransport::newInstance('smtp.office365.com', 587, 'tls')          ->setUsername('xxxxx@xxxxxxx')           ->setPassword('xxxxxxxxxxxx');现在,它工作正常。我认为只有当电子邮件地址(发件人)未在您的组织内验证时,ATP aka SafeLink 保护功能才会起作用。
打开App,查看更多内容
随时随地看视频慕课网APP