Nginx 1.26-এ হওয়া পরিবর্তনগুলির ওভারভিউ
Nginx 1.26 রিলিজ করার সাথে সাথে, নিরাপত্তা বাড়াতে এবং HTTP স্ট্যান্ডার্ড মেনে চলা নিশ্চিত করতে বেশ কিছু গুরুত্বপূর্ণ পরিবর্তন করা হয়েছে। গুরুত্বপূর্ণ আপডেটগুলি নিচে দেওয়া হল:
হেডারের নাম ও ভ্যালুতে হোয়াইটস্পেস ম্যানেজ করা
নিরাপত্তা উন্নত করতে, RFC 7230 মেনে চলার বিষয়টি আরও কঠোর করা হয়েছে, বিশেষ করে হেডার স্পেস হ্যান্ডেল করার ক্ষেত্রে। এইসব পরিবর্তন সম্পর্কে আরও বিবরণ পরিশিষ্টে পাওয়া যাবে।
Content-Length ও Transfer-Encoding হেডার ম্যানেজ করা
অনুরোধ স্মাগলিং অ্যাটাকের ক্ষেত্রে ব্যবহৃত সাধারণ টেকনিকের মধ্যে একটি হল Content-Length ও Transfer-Encoding, দুটি হেডার সহ HTTP অনুরোধ পাঠানো। Apigee Edge আগে থেকেই এই ধরনের অ্যাটাকের বিরুদ্ধে সুরক্ষিত থাকলেও, Nginx এখন স্পষ্টভাবে সেইসব অনুরোধ ব্লক করে দেয় যেগুলিতে দুটি হেডারই থাকে। এই ধরনের অনুরোধ পাঠানো হলে, Nginx 400 ত্রুটিপূর্ণ অনুরোধ মেসেজ দিয়ে উত্তর দেবে।
যেসব সাইফার কাজ করে
এই রিলিজের সাথে সাথে উত্তরমুখী অনুরোধের জন্য কাজ করে এমন সাইফারের তালিকা পরিবর্তিত হতে পারে। উপলভ্য সাইফারের আপডেট করা তালিকা পেতে, আপনার রাউটার হোস্টে OpenSSL-এর সাথে কাজ করে এমন সাইফার চেক করতে পারেন।
যেসব কী সাইজ কাজ করে
আগে, ২০৪৮ বিটের চেয়ে ছোট RSA, DSA ও DH কী এবং ২২৪ বিটের চেয়ে ছোট ECC কী ডিফল্ট হিসেবে গ্রহণ করা হত। তবে, এই আপডেটের পরে, উত্তরমুখী অনুরোধের জন্য একমুখী ও দ্বিমুখী TLS কানেকশন, দুটির ক্ষেত্রেই এই ধরনের কী আর ব্যবহার করা যাবে না।
পরিশিষ্ট
হেডারে হোয়াইটস্পেস
তিনটি প্রধান পরিবর্তন করা হয়েছে:
- আগে অনুমতি দেওয়া হয়েছে এমন কিছু নির্দিষ্ট হেডারের নাম এখন Nginx 1.26-এর মাধ্যমে অনুমতি দেওয়া হয় না। এইসব হেডার সহ অনুরোধের ফলে 400 ত্রুটিপূর্ণ অনুরোধ সংক্রান্ত সমস্যা হবে।
- আগে অনুমোদিত নির্দিষ্ট কিছু হেডার ভ্যালু এখন Nginx 1.26-এর মাধ্যমে অনুমোদিত নয়। এইসব হেডার সহ অনুরোধের ফলে 400 ত্রুটিপূর্ণ অনুরোধ সংক্রান্ত সমস্যাও হবে।
- কিছু হেডার যা আগে Nginx গ্রহণ করত কিন্তু মেসেজ প্রসেসরে ডাউনস্ট্রিম ব্যর্থতার কারণ হত, সেগুলি এখন সরাসরি Nginx প্রত্যাখ্যান করে। এইসব হেডার এখনও API কাজ না করার কারণ হলেও, HTTP কাজ না করার মেসেজ পরিবর্তিত হবে।
নিচের বিভাগে, বিভিন্ন হেডার নাম ও হেডার ভ্যালুর উদাহরণ দেওয়া আছে যেগুলি অনুমোদিত নয়। এগুলি শুধুমাত্র উদাহরণ এবং সম্পূর্ণ তালিকা নাও হতে পারে। হেডার সংক্রান্ত RFC 7230-এর নির্দেশিকা মেনে চলার সাজেশন দেওয়া হয়।
হেডারের নামে পরিবর্তন
এই বিভাগে বিভিন্ন হেডার নামের তালিকা দেওয়া আছে যেগুলি Nginx 1.20.1-এ অনুমোদিত ছিল কিন্তু এখন Nginx 1.26-এ অনুমোদিত নয়।
| পরিস্থিতি | হেডারের নামের উদাহরণ |
|---|---|
| হেডার নামের শুরুতে, শেষে বা মাঝে কন্ট্রোল অক্ষর | { '\u0001'Header0, Value0 } { Header6'\u0002', Value6 } { Header'\u0005'4, Value4 } |
| হেডার নামের আগে ও পরে ফাঁকা জায়গা | {"Header2 ", "Value2"} {" Header3", "Value3"} {" Header4 ", "Value4"} |
| হেডার নামে লিডিং ও ট্রেলিং HTAB | {"\tHeader11", "Value11"} {"Header12\t", "Value12"} {"\tHeader13\t", "Value13"} |
| হেডার নামে HTAB, WS-এর লিডিং ও ট্রেলিং কম্বিনেশন | {"\t Header24", "Value24"} {" \tHeader25", "Value25"} {"Header26 \t", "Value26"} {"Header27\t ", "Value27"} |
| হেডারের নামের মাঝে NewLine (\n) এবং তারপরেই WS বা একাধিক WS | {"Header\n 57Mutiline", "Value57"} {"Header\n 58Mutiline", "Value58"} |
| হেডারের নামের মাঝে NewLine (\n) এবং তারপরেই HTAB বা একাধিক HTAB | {"Header\n\t73", "Value73"} {"Header\n\t\t74", "Value74"} |
| হেডারের নামের মাঝে ক্যারেজ রিটার্ন (\r) নিউলাইন (\n) এবং তারপরেই HTAB বা একাধিক HTAB | {"Header\r\n\t69", "Value69"} {"Header\r\n\t\t70", "Value70"} |
| হেডারের নামের মাঝে ক্যারেজ রিটার্ন (\r) নিউলাইন (\n) এবং তারপরেই WS বা একাধিক WS | {"Header\r\n 71", "Value71"} {"Header\r\n 72", "Value72"} |
হেডার ভ্যালুতে পরিবর্তন
এই বিভাগে বিভিন্ন হেডার ভ্যালু দেখানো হয়েছে যেগুলি Nginx 1.20.1-এ অনুমোদিত হলেও Nginx 1.26-এ অনুমোদিত নয়।
| পরিস্থিতি | উদাহরণ |
|---|---|
| \r\n অথবা WS বা HTAB-এর সাথে \r\n-এর কম্বিনেশন HEADERVALUE-এর মধ্যে ব্যবহার করা যাবে |
{"Header47", "Value47\r\n MultiLine"}, {"Header48", "Value48\r\n MultiLine"}, {"Header49b", "Value49b\r\n \r\nMultiLine"}, {"Header50", "Value50 \r\n MultiLine"}, {"Header51", "Value51\r\n\tMultiLine"}, {"Header52", "Value52\r\n\t\tMultiLine"}, {"Header53", "Value53\t\r\n\tMultiLine"} |
| \n অথবা WS বা HTAB-এর সাথে \n-এর কম্বিনেশন HEADERVALUE-এর মধ্যে ব্যবহার করা যাবে |
{"Header61", "Value\n 61Multiline"}, {"Header62", "Value\n 63Multiline"}, {"Header65", "Value\n\t65"}, {"Header66", "Value\n\t\t66"}, {"Header67", "Value\n 67"}, {"Header68", "Value\n 68"} |
HTTP ব্যর্থতা সংক্রান্ত উত্তরে পরিবর্তন
এই বিভাগে এমন হেডার অন্তর্ভুক্ত রয়েছে যেগুলি পুরনো Nginx-এ অনুমোদিত হলেও আপস্ট্রিম মেসেজ প্রসেসর সেগুলি বাতিল করে দিয়েছে, এর ফলে 400 স্ট্যাটাস কোড দেখানো হয়েছে। তবে, Nginx 1.26-এ, এই ধরনের হেডার সরাসরি Nginx-এ ব্যর্থতার কারণ হয়, যার ফলে মেসেজ প্রসেসরের কাছে অনুরোধ ফরওয়ার্ড করা যায় না।
যেসব ক্লায়েন্ট এই ধরনের হেডার পাঠায়, তাদের জন্য HTTP স্ট্যাটাস কোড 400 থাকবে। তবে, HTTP রেসপন্স বডি পরিবর্তিত হতে পারে কারণ এখন মেসেজ প্রসেসরের পরিবর্তে Nginx-এর মাধ্যমে ব্যর্থতা তৈরি করা হবে।
| পরিস্থিতি | উদাহরণ |
|---|---|
| HEADERNAME-এর মধ্যে HTAB বা WS
মেসেজ প্রসেসর এই ধরনের অনুরোধ প্রত্যাখ্যান করে। Nginx 1.26-এর ক্ষেত্রে, এইসব অনুরোধ Nginx নিজেই বাতিল করে দেবে। API কনজিউমার, বডিতে Nginx সমস্যার মেসেজ সহ একটি 400 সমস্যার উত্তর পাবেন। |
{"Header 5", "Value5"}, {"Header\t14", "Value14"}, {"Header\t 32", "Value32"}, {"Header \t33", "Value33"}, {"Header- 36", "Value36"}, {"Header-\t40", "Value40"}, {"Header 4a", "Value4a"}, {"Header\t 59", "Value59"}, {"Header\t 60", "Value60"} |