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

2024-01-06

这与编码本身并没有真正的关系,我的项目是在 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(使用前将#替换为@)

单击电子邮件中的 Outlook safelink 保护链接似乎会执行代码两次 的相关文章

  • SMTP 配置在生产中不起作用

    我正在尝试在提交表单时发送电子邮件 我正在使用 PHPMailer 使用以下配置发送邮件 mail new PHPMailer mail gt isSMTP mail gt Host mail example in mail gt Port
  • 在值中包含换行符

    我有一个 Word 模板 其中 php 代码中定义了值 在PHP代码中 document gt setValue Value1 value1 在word模板中 Value1 如何将包含两个值之间的断线的值包含在单词的值中 Replace n
  • PHP - 获取base64图像字符串解码并保存为jpg(生成空图像)

    嗨 我实际上是通过 ajax 发送一个 base64 图像字符串到一个 php 脚本 该脚本只是解码字符串并将内容保存为 jpg 文件 但结果是一张空图像 这怎么可能 PHP脚本 uploadedPhotos array photo 1 p
  • 从 octobercms 中的非 ajax 表单获取输入值

    我正在尝试构建一个简单的搜索功能 下面是我的搜索表格
  • PHP 或 WAMP 不确定是什么

    我已经安装了 WAMP 服务器 2 0 PHP 5 4 3 安装WAMP后我已经重新启动了所有服务并且可以打开 phpinfo 显示良好 phpmyadmin 它也显示得很好 我可以使用数据库 然而 当在 Chrome 中运行简单的 php
  • .htaccess 异常导致主目录出现问题

    这是我的目录结构 localhost or livehost app bootstrap public vendor code demo 这是我的 htaccess
  • 如何使用 Facebook SDK API 为页面/网址“点赞”?

    我正在使用这段代码 facebook gt api me likes post array url gt http www google com 我收到以下错误 Fatal error Uncaught OAuthException 200
  • 在字符串中间添加一个字符

    可能有一个简单的解决方案可以解决这个问题 但会引起面部表情 我将时间存储为 4 个字符长的字符串 即 1300 我试图将该字符串显示为 13 00 我觉得必须有一个比我现在正在做的更优雅的解决方案 我目前有 startTime get fi
  • 负载平衡集群中的 PHP 会话 - 如何?

    好的 我得到了这个完全罕见的负载平衡 PHP 网站的独特场景 令人遗憾的是 它过去没有进行负载平衡 现在我们开始遇到问题 目前唯一的问题是 PHP 会话 当然 一开始没有人想到这个问题 因此 PHP 会话配置保留为默认值 因此 两台服务器都
  • 如何在类似 MVC 的页面中加载基于漂亮 URL 的类?

    我想请教一些关于如何解决这个问题的提示 我正在尝试构建自己的 MVC 网站 我了解了 URL 的基础知识 http example com blog cosplay cosplayer expo today 博客 gt 控制器cosplay
  • Magento - 检查 cms 页面

    我想通过 php 检查页面是否是 Magento 中的 cms page 我需要不同的 cms 页面面包屑 所以我尝试在一个条件下做到这一点 但我不知道如何或在哪里查看 到目前为止 这是我的 breadcrumbs phtml p some
  • WordPress 分页自定义帖子类型

    我有一个名为 新闻 的页面 使用页面模板page newslist php 它应该显示来自自定义帖子类型 也称为新闻 的帖子 我意识到两者具有相同的名称会导致问题 因此在注册自定义帖子类型时 我进行了重写以将其与页面区分开来 rewrite
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • 自动建议 php 的 ajax

    我有一个 html 表单 php 脚本和 jquery 我需要一个 ajax 代码来从我的 php 脚本中进行自动建议 以下是代码 表单 html
  • Joomla 页面中的自定义 php 代码

    我正在尝试将 Joomla 1 5 9 页面中的表源从页面中的硬编码 html 更改为从 SQL 数据库获取信息 执行此操作的正确方法是什么 创建一个新的模型或组件并以某种方式在页面中使用它 我找到了这些 http docs joomla
  • phpunit测试调用其他需要mock的类方法的方法

    我正在尝试创建一个非常标准的单元测试 在其中调用一个方法并断言它的响应 但是我正在测试的方法调用同一类中的另一个方法 该方法做了一些繁重的工作 我想模拟该方法 但仍按原样执行我正在测试的方法 仅使用从调用另一种方法返回的模拟值 我简化了示例
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • 如何禁用 iPhone 邮件应用程序中的电话号码链接?

    我的公司正在发送数字电子邮件收据 但遇到了 iPhone Mail 检测数字数据并将其自动链接为电话号码的问题 我已经看到元标记应该可以解决 iPhone 上的 Mobil Safari 中的问题 但该技巧似乎不适用于 Mail 有谁知道如
  • 如何从父类中获取子类名

    我试图在不需要子类上的函数的情况下完成此任务 这可能吗 我有一种感觉 但我真的很想确定
  • 如何在laravel中注册后自动登录

    我在 laravel 中注册用户时遇到问题 user假设是包含所有数组元素的数组 同时自动登录以下代码结果false 数据库中保存的密码是hash make password user id this gt user model gt ad

随机推荐