首頁  >  文章  >  後端開發  >  Laravel 的 TrimStrings 中介軟體如何導致問題

Laravel 的 TrimStrings 中介軟體如何導致問題

WBOY
WBOY原創
2024-08-19 20:35:03840瀏覽

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 方法,它為這種情況提供了量身定制的解決方案。

以下是如何使用供應商應用此解決方案的範例:

use Illuminate\Foundation\Http\Middleware\TrimStrings;
use Illuminate\Http\Request;

// ...

TrimStrings::skipWhen(function (Request $request) {
    return $request->is('api/v1/integrations/foo-provider/callback');
});

此程式碼片段會停用特定路由的 TrimStrings 中介軟體。在這種情況下,來自 api/v1/integrations/foo-provider/callback 路由的請求不會發生修剪,確保雜湊驗證過程順利進行。

結論

Laravel 的預設功能通常會讓事情變得更容易,但在某些情況下,它們可能會導致意想不到的結果。因此,了解我們使用的工具如何運作並仔細評估其潛在影響非常重要。雖然 TrimStrings 中間件在大多數情況下是一個有用的工具,但在這種情況下它可能會導致問題。幸運的是,像 TrimStrings::skipWhen 這樣靈活的解決方案可以讓我們避免此類問題。

以上是Laravel 的 TrimStrings 中介軟體如何導致問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn