סקירה כללית של השינויים ב-Nginx
Apigee Edge for Private Cloud 4.54.00 כולל שדרוג חובה ל-Nginx בגרסה 1.30 בנתבי Edge.
בגרסה 1.26 של Nginx יש כמה שינויים חשובים שמשפרים את האבטחה ומבטיחים עמידה בתקני HTTP. אלה העדכונים העיקריים:
טיפול ברווחים בשמות ובערכים של כותרות
כדי לשפר את האבטחה, חיזקנו את ההקפדה על RFC 7230, במיוחד בנוגע לטיפול ברווחים לבנים בכותרות. פרטים נוספים על השינויים האלה מופיעים בנספח.
טיפול בכותרות Content-Length ו-Transfer-Encoding
אחת מהשיטות הנפוצות שמשמשות להתקפות של הברחת בקשות כוללת שליחת בקשות HTTP עם הכותרות Content-Length ו-Transfer-Encoding. למרות ש-Apigee Edge כבר היה מוגן מפני התקפות כאלה, עכשיו Nginx חוסם באופן מפורש בקשות שמכילות את שתי הכותרות. אם נשלחת בקשה כזו, Nginx יגיב בשגיאה 400 Bad Request.
צפנים נתמכים
יכול להיות שרשימת ההצפנות הנתמכות לבקשות northbound תשתנה בגרסה הזו. כדי לקבל את הרשימה המעודכנת של הצפנים הזמינים, אתם יכולים לבדוק את הצפנים שנתמכים על ידי OpenSSL במארח הנתב שלכם.
גודלי מפתחות נתמכים
בעבר, מפתחות RSA, DSA ו-DH קטנים מ-2,048 ביט ומפתחות ECC קטנים מ-224 ביט התקבלו כברירת מחדל. עם זאת, אחרי העדכון הזה, לא תהיה יותר אפשרות להשתמש במפתחות כאלה גם בחיבורי TLS חד-כיווניים וגם בחיבורי TLS דו-כיווניים לבקשות צפונה.
נספח
רווחים לבנים בכותרות
יש שלושה שינויים עיקריים:
- שמות מסוימים של כותרות שהיו מותרים בעבר, אסורים עכשיו ב-Nginx 1.26. בקשות עם הכותרות האלה יגרמו לשגיאה 400 Bad Request.
- חלק מערכי הכותרות שאושרו בעבר נדחים עכשיו על ידי Nginx 1.26. בקשות עם הכותרות האלה יגרמו גם לשגיאה 400 Bad Request.
- כותרות מסוימות שהתקבלו בעבר על ידי 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"} |
| שורה חדשה (\n) בין שם הכותרת ואחריה מיד רווח לבן (WS) או סדרה של רווחים לבנים (WS) | {"Header\n 57Mutiline", "Value57"} {"Header\n 58Mutiline", "Value58"} |
| שורה חדשה (\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 או שילוב של \r\n עם רווח לבן או HTAB מותרים בין 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 או שילוב של \n עם WS או HTAB מותרים בין 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 במקום על ידי מעבד הבקשות.
| תרחיש | דוגמאות |
|---|---|
| HTAB או WS בין HEADERNAME
מעבד הבקשות דוחה בקשות כאלה. ב-Nginx 1.26, הבקשות האלה יידחו על ידי Nginx עצמו. הצרכן של ה-API יקבל תגובת שגיאה 400 עם הודעת שגיאה של Nginx בגוף. |
{"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"} |