Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Laravel's TrimStrings Middleware Boleh Menyebabkan Isu

Bagaimana Laravel's TrimStrings Middleware Boleh Menyebabkan Isu

WBOY
WBOYasal
2024-08-19 20:35:03912semak imbas

How Laravel

Laravel ialah rangka kerja yang popular di dunia PHP, menawarkan alat yang hebat kepada pembangun untuk memudahkan kerja mereka. Walau bagaimanapun, kadangkala kemudahan ini boleh membawa kepada masalah yang tidak dijangka. Dalam siaran ini, saya akan membincangkan bagaimana TrimStrings middleware dalam Laravel boleh menyebabkan isu dan cara menyelesaikannya.

Apakah TrimStrings Middleware dan Apakah Fungsinya?

Perisian tengah TrimStrings digunakan dalam aplikasi Laravel untuk memangkas ruang putih secara automatik daripada data permintaan masuk, seperti input borang. Ini amat berguna apabila pengguna secara tidak sengaja meninggalkan ruang pada permulaan atau penghujung medan input. Contohnya, jika pengguna memasukkan " user@example.com " dengan ruang di sekeliling alamat e-mel dalam borang, TrimStrings middleware akan memangkas ruang ini, memastikan hanya "user@example.com" diproses .

Ciri ini bermanfaat untuk mencegah ralat yang disebabkan oleh ruang kosong yang tidak diperlukan dan untuk mengendalikan data yang lebih bersih. Walau bagaimanapun, seperti biasa, dalam kes khas tertentu, tingkah laku lalai ini boleh membawa kepada akibat yang tidak diingini.

Apa yang Berlaku?

Dalam projek di mana kami menyepadukan dengan penyedia pembayaran yang berpangkalan di Brazil, kami perlu menangkap dan mengesahkan keputusan pembayaran melalui sistem panggil balik. Pembekal pembayaran menghantar hasil transaksi ke pelayan kami melalui permintaan POST dan kami mengesahkan permintaan dengan melakukan pengesahan tandatangan/cincang.

Proses pengesahan ini mengikut logik yang jelas:

  1. Kami mengambil data yang dihantar oleh pembekal.
  2. Semua data digabungkan menjadi satu rentetan.
  3. Rentetan ini dicincang menggunakan algoritma SHA256 dengan kunci rahsia yang disediakan oleh penyedia pembayaran.
  4. Cincangan yang terhasil dibandingkan dengan cincang yang dihantar oleh pembekal. Jika ia sepadan, permintaan itu diterima; jika tidak, ia ditolak.

Bagaimana Kami Mengenalpasti Masalahnya?

Pada mulanya, sukar untuk memahami mengapa beberapa permintaan yang sah ditolak. Walau bagaimanapun, selepas memeriksa log Nginx, kami mendapati bahawa parameter full_name dalam permintaan masuk mengekalkan ruang belakang. Walaupun begitu, pada pelayan kami, ruang ini telah dipangkas, menyebabkan pengesahan cincang gagal. Ketika itulah kami menyedari bahawa perisian tengah TrimStrings menyebabkan isu ini.

Apakah Penyelesaiannya?

Untuk mengelakkan masalah seperti itu, adalah perlu untuk melumpuhkan TrimStrings perisian tengah untuk laluan atau permintaan tertentu. Laravel 8 memperkenalkan kaedah TrimStrings::skipWhen, yang menyediakan penyelesaian yang disesuaikan untuk situasi ini.

Di bawah ialah contoh cara menggunakan penyelesaian ini menggunakan pembekal:

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

// ...

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

Coretan kod ini melumpuhkan perisian tengah TrimStrings untuk laluan tertentu. Dalam kes ini, pemangkasan tidak akan berlaku untuk permintaan yang datang daripada laluan api/v1/integrations/foo-provider/panggil balik, memastikan proses pengesahan cincang berfungsi dengan lancar.

Kesimpulan

Ciri lalai Laravel pada umumnya menjadikan perkara lebih mudah, tetapi dalam senario tertentu, ciri tersebut boleh membawa kepada hasil yang tidak dijangka. Oleh itu, adalah penting untuk memahami cara alatan yang kami gunakan beroperasi dan menilai potensi kesannya dengan teliti. Walaupun perisian tengah TrimStrings ialah alat yang berguna dalam kebanyakan kes, ia boleh menyebabkan isu dalam senario seperti ini. Nasib baik, penyelesaian fleksibel seperti TrimStrings::skipWhen membolehkan kami mengelakkan masalah sedemikian.

Atas ialah kandungan terperinci Bagaimana Laravel's TrimStrings Middleware Boleh Menyebabkan Isu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn