Laravel 的 TrimStrings 中间件如何导致问题

WBOY
发布: 2024-08-19 20:35:03
原创
761 人浏览过

How Laravel

Laravel 是 PHP 世界中的一个流行框架,为开发人员提供了简化工作的强大工具。然而,有时这些便利可能会导致意想不到的问题。在这篇文章中,我将讨论 Laravel 中的TrimStrings中间件如何导致问题以及如何解决它们。

什么是 TrimStrings 中间件及其作用?

TrimStrings中间件在 Laravel 应用程序中用于自动修剪传入请求数据(例如表单输入)中的空格。当用户不小心在输入字段的开头或结尾留下空格时,这特别有用。例如,如果用户在表单中输入“ user@example.com ”,并且电子邮件地址周围有空格,TrimStrings中间件将修剪这些空格,确保仅处理“user@example.com”。

此功能有利于防止不必要的空格引起的错误以及处理更干净的数据。然而,一如既往,在某些特殊情况下,这种默认行为可能会导致意想不到的后果。

发生了什么?

在我们与巴西支付提供商集成的项目中,我们需要通过回调系统捕获和验证支付结果。支付提供商通过 POST 请求将交易结果发送到我们的服务器,我们通过执行

签名/哈希验证来验证请求。

这个验证过程遵循一个简单的逻辑:

    我们获取提供商发送的数据。
  1. 所有数据都连接成一个字符串。
  2. 此字符串使用
  3. SHA256算法以及支付提供商提供的秘密密钥进行哈希处理。
  4. 将生成的哈希值与提供者发送的哈希值进行比较。如果匹配,则请求被接受;否则,将被拒绝。
我们如何发现问题?

最初,很难理解为什么一些有效的请求被拒绝。然而,在检查 Nginx 日志后,我们注意到传入请求中的

full_name参数保留了尾随空格。尽管如此,在我们的服务器上,这些空格已被修剪,导致哈希验证失败。这时我们意识到 TrimStrings 中间件导致了这个问题。

解决方案是什么?

为了避免此类问题,需要针对特定路由或请求禁用

TrimStrings中间件。 Laravel 8 引入了TrimStrings::skipWhen方法,它为这种情况提供了量身定制的解决方案。

下面是如何使用提供者应用此解决方案的示例:


雷雷

此代码片段禁用特定路由的 TrimStrings 中间件。在这种情况下,来自 api/v1/integrations/foo-provider/callback 路由的请求不会发生修剪,确保哈希验证过程顺利进行。

结论

Laravel 的默认功能通常会让事情变得更容易,但在某些情况下,它们可能会导致意想不到的结果。因此,了解我们使用的工具如何运作并仔细评估其潜在影响非常重要。虽然

TrimStrings中间件在大多数情况下是一个有用的工具,但在这种情况下它可能会导致问题。幸运的是,像TrimStrings::skipWhen这样灵活的解决方案可以让我们避免此类问题。

以上是Laravel 的 TrimStrings 中间件如何导致问题的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!