Nginx-এ করা পরিবর্তনের ওভারভিউ
Apigee Edge for Private Cloud 4.54.00-এ Edge রাউটারে Nginx ভার্সন 1.30-এ বাধ্যতামূলক আপগ্রেড অন্তর্ভুক্ত রয়েছে।
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"} |