这与编码本身并不相关,我的项目是在Laravel 7.1中,但更多的是在Outlook的安全度量中。
基本上,我有一个发送电子邮件的功能,其中包含一个按钮,这是一个链接与令牌和我的Laravel项目中的路由,以执行某些事情(在这种情况下,确认预约取消)。当点击该按钮时,它将用户重定向到一个页面,该页面显示一条消息,表明约会被成功取消或令牌过期(因为ofc执行该操作一次以从数据库中删除令牌结束,所以再次尝试将失败并显示该消息)。
在测试环境中,单击Gmail中的相同按钮或在浏览器地址栏中复制和粘贴链接,即可正常工作。
但是对于Outlook及其带有safelink保护的屏蔽链接,无法正常工作,一旦单击该按钮,它会将用户重定向到过期令牌消息,但操作仍按其应有的方式执行。这是因为safelink正在访问该链接并在允许用户打开新选项卡之前检查它是否安全,问题是“假”访问使我的应用程序按正常方式执行操作:(它基于该令牌取消约会,并从数据库中删除令牌),因此,当用户被重定向时,将计入对该链接的第二次访问,并且用户输出的是过期令牌消息,这当然是误导性的。
对于任何一次使用链接,这基本上都是一个问题,这可能会影响到其他应用程序。
这是微软最近的一个变化,虽然这是几个月前的工作,safelink并不是什么新东西,但他们引入了新的安全功能。这可能也发生在其他邮件提供商身上,但我刚刚用Gmail进行了测试,它并没有做同样的事情,而且它起作用了。
所以我真的不知道我能做些什么来解决这个问题,有没有一种方法可以检测点击不是来自真正的用户或其他什么?Laravel有没有采取措施来克服这一点?
提前谢谢。
发布于 2020-12-02 01:11:47
Safelink保护向网站发起HTTP请求,以获取计划重写的HEAD,然后重写电子邮件中的URL,以便在MS平台上跳转。
许多web应用程序都会处理HEAD请求,比如GET请求。如果这发生在一次性使用的URL上,那么SafeLink的HEAD请求就会触发操作,这意味着当浏览器发出“真正”的请求时,链接就过期了。
我使用的一种解决方案是检查在传入请求上使用的HTTP方法,如果是GET,则仅对其执行操作;如果是其他请求,则返回405 Method Not Allowed状态或类似的状态。
发布于 2020-05-31 10:59:54
这种行为已经存在一段时间了。您能做的最好的事情就是提供一个页面的链接,在这个页面中,用户必须显式地单击另一个链接或按钮。
发布于 2021-06-18 15:49:20
我已经有这个问题几天了。经过反复试验,我刚刚通过自己的测试找到了解决方案,您只需使用您的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 (又称SafeLink保护功能)才会起作用。
https://stackoverflow.com/questions/62108517
复制相似问题