Nginx 1.26 değişikliklerine genel bakış
Nginx 1.26'nın yayınlanmasıyla birlikte, güvenliği artırmak ve HTTP standartlarına uygunluğu sağlamak için çeşitli önemli değişiklikler yapıldı. Başlıca güncellemeler şunlardır:
Başlık adları ve değerlerindeki boşlukların işlenmesi
Güvenliği artırmak için RFC 7230'a uygunluk güçlendirildi. Özellikle üstbilgilerdeki boşlukların işlenmesiyle ilgili iyileştirmeler yapıldı. Bu değişiklikler hakkında daha fazla bilgiyi Ek bölümünde bulabilirsiniz.
Content-Length
ve Transfer-Encoding
başlıklarının işlenmesi
İstek kaçakçılığı saldırılarında kullanılan yaygın tekniklerden biri, hem Content-Length
hem de Transfer-Encoding
üst bilgileri içeren HTTP istekleri göndermeyi içerir. Apigee Edge bu tür saldırılara karşı zaten güçlendirilmiş olsa da Nginx artık her iki başlığı da içeren istekleri açıkça engelliyor. Böyle bir istek gönderilirse Nginx, 400 Bad Request hatasıyla yanıt verir.
Desteklenen şifreler
Kuzeye giden istekler için desteklenen şifrelerin listesi bu sürümle birlikte değişebilir. Kullanılabilir şifrelerin güncel listesini almak için yönlendirici ana makinenizde OpenSSL tarafından desteklenen şifreleri kontrol edebilirsiniz.
Desteklenen anahtar boyutları
Daha önce 2048 bitten küçük RSA, DSA ve DH anahtarları ile 224 bitten küçük ECC anahtarları varsayılan olarak kabul ediliyordu. Ancak bu güncelleme ile birlikte, bu tür anahtarlara artık kuzeye giden istekler için hem tek yönlü hem de çift yönlü TLS bağlantılarında izin verilmeyecek.
Ek
Başlıklardaki boşluk
Başlıca üç değişiklik şunlardır:
- Daha önce izin verilen belirli üstbilgi adlarına artık Nginx 1.26 tarafından izin verilmiyor. Bu üstbilgileri içeren istekler 400 Bad Request (Hatalı İstek) hatasıyla sonuçlanır.
- Daha önce izin verilen belirli başlık değerlerine artık Nginx 1.26 tarafından izin verilmiyor. Bu üstbilgileri içeren istekler de 400 Bad Request (Hatalı İstek) hatasıyla sonuçlanır.
- Daha önce Nginx tarafından kabul edilen ancak ileti işlemcisinde aşağı akışta hatalara neden olan bazı üstbilgiler artık doğrudan Nginx tarafından reddediliyor. Bu başlıklar hâlâ API hatalarına yol açsa da HTTP hata mesajları değişecektir.
Aşağıdaki bölümde, izin verilmeyen çeşitli başlık adları ve başlık değerleriyle ilgili örnekler verilmiştir. Bunlar yalnızca örnek niteliğindedir ve kapsamlı bir liste olmayabilir. Üst bilgiler için RFC 7230 yönergelerine uyulması önerilir.
Üstbilgi adlarındaki değişiklikler
Bu bölümde, Nginx 1.20.1'de izin verilen ancak Nginx 1.26'da artık izin verilmeyen çeşitli başlık adları listelenmektedir.
Senaryo | Üstbilgi adı örnekleri |
---|---|
Başlık adının başında, sonunda veya arasında kontrol karakteri | { '\u0001'Header0, Value0 } { Header6'\u0002', Value6 } { Header'\u0005'4, Value4 } |
Üstbilgi adında baştaki ve sondaki boşluk | {"Header2 ", "Value2"} {" Header3", "Value3"} {" Header4 ", "Value4"} |
Üstbilgi adında baştaki ve sondaki HTAB | {"\tHeader11", "Value11"} {"Header12\t", "Value12"} {"\tHeader13\t", "Value13"} |
Üstbilgi adında HTAB, WS'nin baştaki ve sondaki kombinasyonu | {"\t Header24", "Value24"} {" \tHeader25", "Value25"} {"Header26 \t", "Value26"} {"Header27\t ", "Value27"} |
Başlık adının hemen ardından WS veya bir dizi WS'nin geldiği NewLine (\n) | {"Header\n 57Mutiline", "Value57"} {"Header\n 58Mutiline", "Value58"} |
Başlık adı ile HTAB veya bir dizi HTAB arasında NewLine (\n) | {"Header\n\t73", "Value73"} {"Header\n\t\t74", "Value74"} |
Üstbilgi adının hemen ardından gelen HTAB veya bir dizi HTAB arasında satır başı (\r) Yeni Satır (\n) | {"Header\r\n\t69", "Value69"} {"Header\r\n\t\t70", "Value70"} |
Üstbilgi adının hemen ardından gelen satır başı (\r) ve yeni satır (\n) karakterleri veya bir dizi boşluk karakteri | {"Header\r\n 71", "Value71"} {"Header\r\n 72", "Value72"} |
Üstbilgi değerlerindeki değişiklikler
Bu bölümde, Nginx 1.20.1'de izin verilen ancak Nginx 1.26'da izin verilmeyen çeşitli başlık değerleri gösterilmektedir.
Senaryo | Örnekler |
---|---|
HEADERVALUE arasında \r\n veya WS ya da HTAB ile \r\n kombinasyonuna izin verilir. |
{"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"} |
HEADERVALUE içinde \n veya \n ile WS ya da HTAB kombinasyonuna izin verilir. |
{"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 hatası yanıtındaki değişiklik
Bu bölümde, eski Nginx tarafından izin verilen ancak yukarı akış mesajı işlemcisi tarafından reddedilen ve 400 durum koduyla sonuçlanan başlıklar ele alınmaktadır. Ancak Nginx 1.26'da bu tür başlıklar doğrudan Nginx'te hatalara neden olarak isteğin ileti işlemcisine iletilmesini engeller.
Bu tür başlıklar gönderen istemciler için HTTP durum kodu 400 olarak kalır. Ancak, hata artık mesaj işlemcisi yerine Nginx tarafından oluşturulacağından HTTP yanıt gövdesi değişebilir.
Senaryo | Örnekler |
---|---|
HEADERNAME arasında HTAB veya WS
Mesaj İşleyici bu tür istekleri reddeder. Nginx 1.26 ile bu istekler Nginx tarafından reddedilir. API tüketicisi, gövdede bir Nginx hata mesajı içeren 400 hata yanıtı alır. |
{"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"} |