Bir sorgu dizesinin olası maksimum uzunluğu nedir?


Yanıtlar:


995

RFC 2616 (Köprü Metni Aktarım Protokolü - HTTP / 1.1), bir sorgu dizesinin uzunluğu için bir sınır olmadığını belirtir (bölüm 3.2.1). RFC 3986 (Tekdüzen Kaynak Tanımlayıcısı - URI) da sınır olmadığını belirtir, ancak DNS sınırlamaları nedeniyle ana bilgisayar adının 255 karakterle sınırlı olduğunu belirtir (bölüm 2.3.3).

Spesifikasyonlar herhangi bir maksimum uzunluk belirtmese de, web tarayıcısı ve sunucu yazılımı tarafından pratik limitler uygulanır. Ne yazık ki orijinal sitesinde artık mevcut olmayan (gölgeli görünen bir kredi sitesine yol açan) ancak Boutell.com İnternet Arşivi'nde hala bulunabilen araştırmalara dayanarak :

  • Microsoft Internet Explorer (Tarayıcı)
    Microsoft, Internet Explorer'daki bir URL'nin maksimum uzunluğunun 2.083 karakter olduğunu ve URL'nin yol bölümünde en fazla 2.048 karakter olduğunu belirtir. URL'leri bundan daha uzun kullanma girişimleri Internet Explorer'da açık bir hata mesajı verdi.

  • Microsoft Edge (Tarayıcı)
    Sınır yaklaşık 81578 karakter gibi görünüyor. Bkz . Microsoft Edge'in URL Uzunluğu sınırlaması

  • Chrome URL'yi 64 bin karakterden sonra görüntülemeyi
    durdurur , ancak 100 bin karakterden fazlasını sunabilir. Bunun ötesinde başka test yapılmadı.

  • Firefox (Tarayıcı)
    65.536 karakterden sonra konum çubuğu artık Windows Firefox 1.5.x'te URL'yi görüntülemiyor. Ancak, daha uzun URL'ler çalışır. 100.000 karakterden sonra başka test yapılmadı.

  • Safari (Tarayıcı)
    En az 80.000 karakter çalışacaktır. Test bunun ötesinde denenmedi.

  • Opera (Tarayıcı)
    En az 190.000 karakter çalışacaktır. 190.000 karakterden sonra test durduruldu. Windows için Opera 9, 190.000 karakterde bile konum çubuğunda tamamen düzenlenebilir, kopyalanabilir ve biçimlendirilebilir bir URL göstermeye devam etti.

  • Apache (Sunucu)
    Yaklaşık 4.000 karakterlik bir sunucu URL uzunluğu sınırına yerleştirilen web tarayıcılarındaki maksimum URL uzunluğunu ölçmeye yönelik erken girişimler, ardından Apache "413 Varlık Çok Büyük" hatası üretir. Red Hat Enterprise Linux 4'te bulunan güncel Apache derlemesi kullanıldı. Resmi Apache dokümanları, bir talepte sadece bireysel bir alanda 8.192 baytlık bir sınırdan bahseder.

  • Microsoft Internet Information Server (Sunucu)
    Varsayılan sınır 16.384 karakterdir (evet, Microsoft'un web sunucusu Microsoft'un web tarayıcısından daha uzun URL'leri kabul eder). Bu yapılandırılabilir.

  • Perl HTTP :: Daemon (Sunucu)
    8.000 bayta kadar çalışacaktır. Perl'in HTTP :: Daemon modülüyle web uygulama sunucuları kuranlar, tüm HTTP istek başlıklarının birleşik boyutu üzerinde 16.384 baytlık bir sınırla karşılaşacaklardır. Bu POST yöntemi form verilerini, dosya yüklemelerini vb. İçermez, ancak URL'yi içerir. Pratikte bu, bir URL 8.000 karakterden önemli ölçüde uzun olduğunda 413 hatasıyla sonuçlandı. Bu sınırlama kolayca kaldırılabilir. Daemon.pm dosyasında tüm 16x1024 örneklerini arayın ve daha büyük bir değerle değiştirin. Tabii ki bu, hizmet reddi saldırılarına maruz kalmanızı artırır.


8
Neden "Microsoft Internet Explorer (Tarayıcı)" yerine sürüm numarasını söylemiyorsunuz?
LCJ

5
Sorgu Dizesi'ndeki
JTech


Bir tür yaptığınızı ve DNS sınırlamalarının 2.2.3 değil, RFC3986'nın "3.2.2. Ana bilgisayar" bölümünde tartışıldığını düşünüyorum. "URI üreticileri, DNS kullanımı hemen belli olmasa bile, DNS sözdizimine uygun adları kullanmalı ve bu adları 255 karakterden daha uzun olmamalıdır."
Craig Hicks

java.lang.IllegalArgumentException: Request header is too largeTomcat Spring Boot Uygulama Sunucusunda Nedenler .
Paramvir Singh Karwal

12

Resmi olarak RFC 2616 tarafından belirtilen bir sınır olmamasına rağmen, birçok güvenlik protokolü ve önerisi bir sunucudaki maxQueryStrings'in maksimum karakter sınırının 1024 olarak ayarlanması gerektiğini belirtir. Sorgu dizesi de dahil olmak üzere URL'nin tamamı en fazla 2048 olarak ayarlanmalıdır. karakter. Bu, bir web sunucusunda Yavaş HTTP İsteği DDOS güvenlik açığını önlemek içindir. Bu genellikle Qualys Web Application Scanner ve diğer güvenlik tarayıcılarında bir güvenlik açığı olarak görünür.

Lütfen Web.config içeren Windows IIS Sunucuları için aşağıdaki örnek koda bakın:

<system.webServer>
<security>
    <requestFiltering>
        <requestLimits maxQueryString="1024" maxUrl="2048">
           <headerLimits>
              <add header="Content-type" sizeLimit="100" />
           </headerLimits>
        </requestLimits>
     </requestFiltering>
</security>
</system.webServer>

Bu, machine.config kullanarak bir sunucu düzeyinde de çalışır.

Not: Sorgu dizesini ve URL uzunluğunu sınırlamak Yavaş HTTP İstekleri DDOS saldırısını tamamen engellemeyebilir, ancak bunu önlemek için atabileceğiniz bir adımdır.


2
Ve şimdi arka uç mühendislerine, bir GET isteğinin sorguları sorgusunda yüz 36 karakterlik UUID'lerin bir listesini kabul etmeyeceğimizi söyleyebileceğim bir nedenim var. Teşekkürler!
Mordred

1

Farklı web yığınları farklı uzunlukta http isteklerini destekler. Deneyimlerimden Safari'nin ilk yığınlarının yalnızca 4000 karakteri desteklediğini ve bu nedenle USER-STATE nedeniyle ASP.net sayfalarını işlemede zorluk yaşadığını biliyorum. Bu POST için bile geçerlidir, bu nedenle tarayıcıyı kontrol etmeniz ve yığın sınırının ne olduğunu görmeniz gerekir. Yeni tarayıcılarda bile bir sınıra ulaşabileceğinizi düşünüyorum. Hatırlayamıyorum ama bunlardan birinin (IE6, sanırım) 16 bitlik bir sınırı, 32.768 falan vardı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.