เรามีบริการเว็บที่อยู่เบื้องหลังเซิร์ฟเวอร์ HAProxy ที่กำลังทำงานอยู่ แคชพร็อกซีย้อนกลับ การกำหนดค่า เซิร์ฟเวอร์ส่วนหลังส่ง การควบคุมแคช
ส่วนหัวอย่างถูกต้องสำหรับการตอบกลับทั้งหมด ดังนั้น HAProxy จึงสามารถแคชการตอบกลับทั้งหมดตามข้อกำหนด HTTP
อย่างไรก็ตาม เมื่อผู้ใช้กดปุ่ม Shift+Reload เช่น Google Chrome ลูกค้า (Chrome) ส่ง Pragma: ไม่มีแคช
และ การควบคุมแคช: ไม่มีแคช
ซึ่งบังคับให้ HAProxy ดึงคำขอจากเซิร์ฟเวอร์ส่วนหลังเสมอ เห็นได้ชัดว่าการโจมตี DDoS สามารถใช้กลอุบายเดียวกันนี้เพื่อทำให้เซิร์ฟเวอร์แบ็กเอนด์โหลดมากขึ้นได้อย่างง่ายดาย
ดังที่เราทราบแล้วว่าส่วนหัวของแคชนั้นถูกต้อง เราจะกำหนดค่า HAProxy ให้ละเว้นไคลเอ็นต์ที่ส่งมาได้อย่างไร Pragma: ไม่มีแคช
และหลีกเลี่ยงการโทรแบ็กเอนด์เมื่อคำขอสามารถดำเนินการได้โดยตรงจากแคช HAProxy
ฉันรู้ว่าการเพิกเฉยส่วนหัวนี้จะไม่โอเคสำหรับการใช้พร็อกซีทั่วไป แต่ในกรณีนี้ เราควบคุมทั้งพร็อกซีย้อนกลับและแบ็กเอนด์ ดังนั้นเราจึงรู้ว่าสิ่งนี้ใช้ได้
ต่อไปนี้คือตัวอย่างการตอบกลับจากเซิร์ฟเวอร์ส่วนหลังซึ่งจะดำเนินการใหม่จากส่วนหลังเมื่อไคลเอนต์ส่ง การควบคุมแคช: ไม่มีแคช
และ Pragma: ไม่มีแคช
:
การควบคุมแคช: สาธารณะ, max-age=31536000, s-maxage=31536000
ความยาวเนื้อหา: 463
ประเภทเนื้อหา: รูปภาพ/svg+xml
วันที่: พฤ. 24 มิ.ย. 2564 14:14:19 GMT
ชื่อแท็ก: "338"
หมดอายุ: วันศุกร์ที่ 24 มิถุนายน 2022 14:14:19 GMT
เซิร์ฟเวอร์: อาปาเช่
x-content-type-options: nosniff
เห็นได้ชัดว่า โดยสิ้นเชิง ไม่มีจุดหมายที่จะดึงข้อมูลนี้จากเซิร์ฟเวอร์แบ็กเอนด์อีกครั้งเนื่องจากใช้ได้หนึ่งปีสำหรับผู้ใช้ที่ใช้ URL ที่ระบุ นอกจากนี้ที่น่าสังเกตก็คือ NGINX ไม่ให้เกียรติส่วนหัว [client] Pragma ตามค่าเริ่มต้น.