มันขึ้นอยู่กับเบราว์เซอร์หรือไม่? นอกจากนี้สแต็คเว็บที่แตกต่างกันมีข้อ จำกัด ที่แตกต่างกันในการรับข้อมูลจากคำขอจำนวนเท่าใด
มันขึ้นอยู่กับเบราว์เซอร์หรือไม่? นอกจากนี้สแต็คเว็บที่แตกต่างกันมีข้อ จำกัด ที่แตกต่างกันในการรับข้อมูลจากคำขอจำนวนเท่าใด
คำตอบ:
RFC 2616 (Hypertext Transfer Protocol - HTTP / 1.1) ระบุว่าไม่มีความยาวของสตริงการสืบค้น (ส่วน 3.2.1) RFC 3986 (Uniform Resource Identifier - URI) ยังระบุว่าไม่มีขีด จำกัด แต่ระบุว่าชื่อโฮสต์ถูก จำกัด ที่ 255 อักขระเนื่องจากข้อ จำกัด DNS (ส่วน 2.3.3)
ในขณะที่ข้อมูลจำเพาะไม่ได้ระบุความยาวสูงสุดขีด จำกัด ในทางปฏิบัติถูกกำหนดโดยเว็บเบราว์เซอร์และซอฟต์แวร์เซิร์ฟเวอร์ จากการวิจัยซึ่งน่าเสียดายที่ไม่มีให้บริการในไซต์ดั้งเดิมอีกต่อไป (นำไปสู่ไซต์ยืมที่ดูร่มรื่น) แต่ยังสามารถพบได้ที่Internet Archive Of Boutell.com :
Microsoft Internet Explorer (เบราว์เซอร์)
Microsoft ระบุว่าความยาวสูงสุดของ URL ใน Internet Explorer คือ 2,083 ตัวอักษรโดยมีความยาวไม่เกิน 2,048 อักขระในส่วนเส้นทางของ URL ความพยายามในการใช้ URL ที่ยาวกว่านี้ทำให้เกิดข้อผิดพลาดที่ชัดเจนใน Internet Explorer
Microsoft Edge (เบราว์เซอร์)
ขีด จำกัด มีความยาวประมาณ 81578 ตัวอักษร ดูข้อจำกัดความยาวของ URL ของ Microsoft Edge
Chrome
มันหยุดแสดง URL หลังตัวอักษร 64k แต่สามารถแสดงได้มากกว่า 100k ตัวอักษร ไม่มีการทดสอบเพิ่มเติมใด ๆ
Firefox (เบราว์เซอร์)
หลังจาก 65,536 ตัวอักษรแถบตำแหน่งจะไม่แสดง URL ใน Windows Firefox 1.5.x อีกต่อไป อย่างไรก็ตาม URL ที่ยาวขึ้นจะใช้งานได้ ไม่มีการทดสอบเพิ่มเติมหลังจาก 100,000 ตัวอักษร
Safari (เบราว์เซอร์)
อย่างน้อย 80,000 ตัวอักษรจะทำงาน การทดสอบไม่ได้ถูกลองมากกว่านั้น
Opera (เบราว์เซอร์)
อย่างน้อย 190,000 ตัวอักษรจะทำงานได้ หยุดการทดสอบหลังจาก 190,000 ตัวอักษร Opera 9 สำหรับ Windows ยังคงแสดง URL ที่สามารถแก้ไขได้คัดลอกและวางได้อย่างสมบูรณ์ในแถบตำแหน่งแม้จะมีความยาว 190,000 อักขระ
Apache (เซิร์ฟเวอร์)
ความพยายามในการวัดความยาว URL สูงสุดในเว็บเบราว์เซอร์ในช่วงแรกนั้นจำกัดความยาว URL ของเซิร์ฟเวอร์ประมาณ 4,000 ตัวอักษรหลังจากนั้น Apache จะสร้างข้อผิดพลาด "413 Entity Too Large" มีการสร้าง Apache รุ่นล่าสุดที่พบใน Red Hat Enterprise Linux 4 เอกสาร Apache อย่างเป็นทางการกล่าวถึงข้อ จำกัด 8,192 ไบต์ในแต่ละฟิลด์ในคำขอ
เซิร์ฟเวอร์ข้อมูลทางอินเทอร์เน็ตของ Microsoft (เซิร์ฟเวอร์)
ขีด จำกัด เริ่มต้นคือ 16,384 อักขระ (ใช่เว็บเซิร์ฟเวอร์ของ Microsoft ยอมรับ URL ที่ยาวกว่าเว็บเบราว์เซอร์ของ Microsoft) สิ่งนี้สามารถกำหนดค่าได้
Perl HTTP :: Daemon (เซิร์ฟเวอร์)
สูงสุด 8,000 ไบต์จะใช้งานได้ ผู้ที่สร้างเว็บแอพพลิเคชันเซิร์ฟเวอร์ด้วยโมดูล HTTP :: Daemon ของ Perl จะพบข้อ จำกัด 16,384 ไบต์ในขนาดที่รวมกันของส่วนหัวคำขอ HTTP ทั้งหมด สิ่งนี้ไม่รวมถึงข้อมูลในแบบฟอร์มวิธี POST การอัพโหลดไฟล์ ฯลฯ แต่จะรวมถึง URL ด้วย ในทางปฏิบัติสิ่งนี้ส่งผลให้เกิดข้อผิดพลาด 413 เมื่อ URL มีความยาวมากกว่า 8,000 ตัวอักษรอย่างมีนัยสำคัญ ข้อ จำกัด นี้สามารถนำออกได้ง่าย ค้นหาการเกิดขึ้นทั้งหมดของ 16x1024 ใน Daemon.pm และแทนที่ด้วยค่าที่มากขึ้น แน่นอนว่านี่เป็นการเพิ่มการเปิดเผยของคุณต่อการปฏิเสธการโจมตีบริการ
java.lang.IllegalArgumentException: Request header is too large
ในเซิร์ฟเวอร์แอปพลิเคชันบูตฤดูใบไม้ผลิ
แม้ว่าอย่างเป็นทางการจะไม่มีการ จำกัด ที่ระบุโดย RFC 2616 โปรโตคอลความปลอดภัยจำนวนมากและคำแนะนำระบุว่า maxQueryStrings บนเซิร์ฟเวอร์ควรตั้งค่าความยาวสูงสุดของอักขระสูงสุด 1024 ในขณะที่ URL ทั้งหมดรวมถึงการสืบค้นควรตั้งค่าสูงสุด 2048 ตัวละคร นี่คือเพื่อป้องกันช่องโหว่ DDOS ช้า HTTP ร้องขอบนเว็บเซิร์ฟเวอร์ โดยทั่วไปแล้วสิ่งนี้จะแสดงให้เห็นว่าเป็นช่องโหว่ของ Qualys Web Application Scanner และสแกนเนอร์ความปลอดภัยอื่น ๆ
โปรดดูตัวอย่างรหัสด้านล่างสำหรับ Windows IIS Servers ด้วย Web.config:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxQueryString="1024" maxUrl="2048">
<headerLimits>
<add header="Content-type" sizeLimit="100" />
</headerLimits>
</requestLimits>
</requestFiltering>
</security>
</system.webServer>
สิ่งนี้จะทำงานในระดับเซิร์ฟเวอร์โดยใช้ machine.config
หมายเหตุ: การ จำกัด สตริงข้อความค้นหาและความยาว URL อาจไม่สมบูรณ์ป้องกันคำขอ HTTP ช้าการโจมตี DDOS แต่เป็นขั้นตอนเดียวที่คุณสามารถทำได้เพื่อป้องกัน
สแต็คเว็บที่แตกต่างกันรองรับความยาวของคำขอ http ที่แตกต่างกัน ฉันรู้จากประสบการณ์ว่าสแต็คแรก ๆ ของ Safari รองรับเฉพาะอักขระ 4000 ตัวเท่านั้นดังนั้นจึงลำบากในการจัดการหน้า ASP.net เนื่องจาก USER-STATE นี่เป็นเพียง POST ดังนั้นคุณจะต้องตรวจสอบเบราว์เซอร์และดูว่าขีด จำกัด ของสแต็กคืออะไร ฉันคิดว่าคุณอาจถึงขีด จำกัด แม้ในเบราว์เซอร์ที่ใหม่กว่า ฉันจำไม่ได้ แต่มีหนึ่งในนั้น (IE6 ฉันคิดว่า) มีขีด จำกัด 16 บิต 32,768 หรืออะไรบางอย่าง