𝗜 𝗠𝗲𝘀𝘀𝗲𝗱 𝗨𝗽 𝗠𝘆 𝗡𝗲𝘅𝘁.𝗷𝘀 𝗔𝘂𝘁𝗵 𝗠𝗮𝘁𝗰𝗵𝗲𝗿 𝗧𝗵𝗿𝗲𝗲 𝗧𝗶𝗺𝗲𝘀

Next.js 16-এ proxy.ts কীভাবে কাজ করে তা বোঝার আগে আমি তিনটি প্রজেক্ট নষ্ট করে ফেলেছি।

এররটি ছিল নিঃশব্দ। কোনো লগ ছিল না। কোনো ওয়ার্নিং ছিল না। কোনো এরর ছিল না। শুধু কাজ না করা রিডাইরেক্ট এবং সিকিউরিটি গ্যাপ ছিল।

আপনি যদি Next.js 16-এ আপগ্রেড করেন, তবে শুধু একটি codemod চালিয়ে কাজ শেষ করবেন না। আপনাকে এই তিনটি জিনিস অবশ্যই পরীক্ষা করতে হবে।

𝗧𝗵𝗲 𝗠𝗶𝗴𝗿𝗮𝘁𝗶𝗼𝗻 𝗧𝗿𝗮𝗽

Next.js middleware.ts-এর নাম পরিবর্তন করে proxy.ts করেছে। এটি কেবল একটি নামের পরিবর্তন নয়।

আপনি যদি codemod ব্যবহার না করে ম্যানুয়ালি আপনার প্যাকেজ আপডেট করেন, তবে আপনার পুরনো middleware.ts ফাইলটি থেকে যেতে পারে। এটি ঠিকঠাক কম্পাইল হবে। এটি TypeScript চেক পাস করবে। কিন্তু এটি কিছুই করবে না। আপনার রুটগুলো ইন্টারসেপ্ট (intercept) হবে না। আপনার রিডাইরেক্টগুলো কাজ করবে না।

এই তিনটি জিনিস ম্যানুয়ালি পরীক্ষা করুন:

𝗧𝗵𝗲 𝗠𝗮𝘁𝗰𝗵𝗲𝗿 𝗚𝗮𝗽

ম্যাচার (matcher) হলো সেই জায়গা যেখানে অথ (auth) সেটআপ সবচেয়ে বেশি ব্যর্থ হয়।

আপনার ম্যাচার যদি খুব বেশি ব্রড (broad) হয়, তবে প্রক্সি প্রতিটি CSS এবং ইমেজ ফাইলের ওপর চলে। এর ফলে ইনফিনিট রিডাইরেক্ট লুপ (infinite redirect loops) তৈরি হয়।

আপনার ম্যাচার যদি খুব বেশি ন্যারো (narrow) হয়, তবে আপনি একটি সিকিউরিটি হোল (security hole) তৈরি করছেন।

যদি কোনো রুট আপনার ম্যাচারে না থাকে, তবে প্রক্সি কখনোই চলবে না। একজন ব্যবহারকারী সেই রুটে তার নিজস্ব হেডার (headers) পাঠাতে পারে। যদি আপনার Server Component সেই হেডারগুলোকে বিশ্বাস করে, তবে একজন অ্যাটাকার যে কারো পরিচয় ধারণ করতে পারে।

𝗧𝗵𝗲 𝗙𝗶𝘅: 𝗗𝗼𝗻’𝘁 𝗧𝗿𝘂𝘀𝘁 𝗛𝗲𝗮𝗱𝗲𝗿𝘀

আমি কঠিন অভিজ্ঞতার মাধ্যমে শিখেছি: শুধুমাত্র প্রক্সি দ্বারা ফরওয়ার্ড করা হেডারের ওপর নির্ভর করবেন না।

একটি টু-লেয়ার (two-layer) পদ্ধতি ব্যবহার করুন:

এই দ্বিতীয় চেকটি গ্যাপটি পূরণ করে দেয়। এমনকি ম্যাচার যদি কোনো রুট মিস করে, তবুও Server Component অবৈধ ব্যবহারকারীকে শনাক্ত করবে। এটি কয়েক মিলিসেকেন্ড ল্যাটেন্সি (latency) বাড়ালেও একটি বড় ধরনের সিকিউরিটি ফেইলিউর প্রতিরোধ করে।

𝗦𝘂𝗺𝗺𝗮𝗿𝘆 𝗖𝗵𝗲𝗰𝗸𝗹𝗶𝘀𝘁:

Source: https://dev.to/shubhradev/i-got-the-proxyts-matcher-wrong-for-three-projects-before-i-understood-why-4e5c