首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单击电子邮件中的Outlook safelink保护链接似乎是在执行代码两次

单击电子邮件中的Outlook safelink保护链接似乎是在执行代码两次
EN

Stack Overflow用户
提问于 2020-05-31 04:51:03
回答 3查看 1.7K关注 0票数 9

这与编码本身并不相关,我的项目是在Laravel 7.1中,但更多的是在Outlook的安全度量中。

基本上,我有一个发送电子邮件的功能,其中包含一个按钮,这是一个链接与令牌和我的Laravel项目中的路由,以执行某些事情(在这种情况下,确认预约取消)。当点击该按钮时,它将用户重定向到一个页面,该页面显示一条消息,表明约会被成功取消或令牌过期(因为ofc执行该操作一次以从数据库中删除令牌结束,所以再次尝试将失败并显示该消息)。

在测试环境中,单击Gmail中的相同按钮或在浏览器地址栏中复制和粘贴链接,即可正常工作。

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

对于任何一次使用链接,这基本上都是一个问题,这可能会影响到其他应用程序。

这是微软最近的一个变化,虽然这是几个月前的工作,safelink并不是什么新东西,但他们引入了新的安全功能。这可能也发生在其他邮件提供商身上,但我刚刚用Gmail进行了测试,它并没有做同样的事情,而且它起作用了。

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

提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2020-12-02 01:11:47

Safelink保护向网站发起HTTP请求,以获取计划重写的HEAD,然后重写电子邮件中的URL,以便在MS平台上跳转。

许多web应用程序都会处理HEAD请求,比如GET请求。如果这发生在一次性使用的URL上,那么SafeLink的HEAD请求就会触发操作,这意味着当浏览器发出“真正”的请求时,链接就过期了。

我使用的一种解决方案是检查在传入请求上使用的HTTP方法,如果是GET,则仅对其执行操作;如果是其他请求,则返回405 Method Not Allowed状态或类似的状态。

票数 6
EN

Stack Overflow用户

发布于 2020-05-31 10:59:54

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

票数 1
EN

Stack Overflow用户

发布于 2021-06-18 15:49:20

我已经有这个问题几天了。经过反复试验,我刚刚通过自己的测试找到了解决方案,您只需使用您的outlook帐户设置SMTP配置即可。

使用PHPMailer

我以前有过这样的配置

代码语言:javascript
运行
复制
$trans = Swift_SmtpTransport::newInstance()
         ->setHost("xxxxxxxxxxx.mail.protection.outlook.com")
         ->setPort(25);

我改成了

代码语言:javascript
运行
复制
$trans = Swift_SmtpTransport::newInstance('smtp.office365.com', 587, 'tls')
         ->setUsername('xxxxx@xxxxxxx') 
         ->setPassword('xxxxxxxxxxxx');

现在,它工作正常了。我认为只有当电子邮件地址(发件人)未在您的组织内验证时,ATP (又称SafeLink保护功能)才会起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62108517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档