มีคนต้องการตรวจดูว่าไคลเอนต์ส่งอะไรผ่านอุโมงค์ พบฮุกเชื่อมต่อในเอกสาร และเริ่มเขียนสคริปต์ที่จะไม่ได้รับแพ็กเก็ตแม้แต่แพ็กเก็ตเดียว ฮุกนั้นมีจริงและมีประโยชน์ แต่หน่วยงานของมันคือเซสชัน ไม่ใช่ไบต์ การเลือกองค์ประกอบที่ถูกต้องคือการเปรียบเทียบสามตำแหน่งที่งานจะเกิดขึ้นได้ และคำถามชี้ขาดคือแต่ละอย่างมองเห็นหน่วยใดได้จริง

ฮุกได้รับอะไร และไม่ได้รับอะไรเลย

ฮุกเชื่อมต่อของไคลเอนต์ทำงานครั้งเดียวเมื่อไคลเอนต์ที่ผ่านการพิสูจน์ตัวตนสร้างเซสชัน ในบริบทของโปรเซสเซิร์ฟเวอร์ ด้วยอาร์กิวเมนต์ที่มีการบันทึกไว้และค่าสภาพแวดล้อม เช่น ชื่อสามัญและที่อยู่ที่จัดสรรให้ มันสามารถเขียนการกำหนดค่าต่อไคลเอนต์ ตัดสินใจรับเข้า จัดสรรแหล่งทรัพยากรภายนอก หรือบันทึกว่าการเชื่อมต่อเกิดขึ้น สิ่งที่ทำไม่ได้คือสังเกตทราฟฟิก เพราะเมื่อแพ็กเก็ตแรกข้ามอุโมงค์ ฮุกได้คืนค่าไปแล้ว

นี่ไม่ใช่ข้อจำกัดที่ต้องหลบเลี่ยง การเรียกกลับของเซสชันที่พยายามประมวลผลสตรีมจะต้องทำงานตลอดอายุการเชื่อมต่อ และสัญญาสคริปต์ของเดมอนไม่ได้สร้างมาสำหรับรูปแบบนั้น ถามก่อนว่าฮุกมีไว้เพื่ออะไรก่อนตัดสินว่ามันขวางทาง

การเชื่อมต่อใหม่ก็สำคัญ ไคลเอนต์ที่หลุดแล้วเชื่อมต่อใหม่คือเซสชันใหม่ ดังนั้นทุกสิ่งที่ฮุกจัดสรรต้องทำงานซ้ำได้อย่างปลอดภัย หรือต้องจับคู่กับเหตุการณ์ตัดการเชื่อมต่อที่ทำความสะอาด สถานะที่รั่วทุกครั้งที่เชื่อมต่อใหม่คือบั๊กแรกที่พบบ่อยในการออกแบบที่ใช้ฮุก

โยบายเซสชันอยู่ในฮุก

การรับเข้าคืองานธรรมชาติของฮุก คุณรู้ว่าใครเชื่อมต่อ จากที่ไหน และด้วยใบรับรองใด และคุณตัดสินได้ว่าเซสชันนี้ควรดำเนินต่อหรือถูกปฏิเสธ การตัดสินนั้นทำครั้งเดียว และไม่ต้องดูไบต์ของเพย์โหลดแม้แต่ไบต์เดียว

การกำหนดค่าก็เข้ารูปแบบเดียวกัน ฮุกสามารถเลือกที่อยู่ของไคลเอนต์ ส่งตัวเลือกที่เหมาะกับตัวตนนั้น หรือเขียนส่วนที่เซิร์ฟเวอร์อ่านสำหรับไคลเอนต์นี้ เพราะการตัดสินเป็นรายเซสชัน จึงยังเข้าใจได้เมื่อมีอะไรผิดพลาดและมีคนต้องอธิบายว่าทำไมไคลเอนต์หนึ่งได้รับที่อยู่หนึ่ง

การบันทึกคือความเหมาะสมที่สาม รายการตรวจสอบที่บอกว่าเซสชันได้รับอนุญาต พร้อมตัวตนและเวลา อยู่ในที่นี้พอดี ไม่ใช่บันทึกทราฟฟิกและไม่ควรทำเป็นเช่นนั้น หากภายหลังมีคนถามว่าไคลเอนต์ทำอะไรในอุโมงค์ คำตอบต้องมาจากที่อื่น

งานแพ็กเก็ตอยู่ในเส้นทางแพ็กเก็ต

หากข้อกำหนดคือการดูหรือแก้ไขไบต์ที่กำลังวิ่ง องค์ประกอบต้องอยู่ในเส้นทางส่งต่อ คือกฎไฟร์วอลล์ที่มีคิว ฮุกควบคุมทราฟฟิก หรือตัวส่งต่อในพื้นที่ผู้ใช้ กลไกเหล่านั้นเห็นแพ็กเก็ต และมีสถานะ โหมดล้มเหลว และโปรไฟล์สมรรถนะของตัวเอง

การแก้ไขเพย์โหลดในชั้นนั้นยากกว่าการอ่าน การเปลี่ยนไบต์หนึ่งอาจทำให้ฟิลด์ความยาว เช็กซัม หรือเครื่องสถานะของโปรโตคอลใช้ไม่ได้ และอุโมงค์ชั้นสามไม่ได้ป้องกันคุณจากสิ่งเหล่านั้นเลย มันเพียงหมายความว่าส่วนหัวภายนอกไม่ใช่สิ่งที่คุณแก้ไข ตั้งงบสำหรับงานซ่อมนั้นก่อนสัญญากับใครเรื่องการเขียนเนื้อหาใหม่

การดักจับอินเทอร์เฟซเป็นเครื่องมือที่ถูกที่สุดในหมวดนี้ และเป็นการสังเกต ไม่ใช่ตัวแก้ไข ผู้คนสับสนทั้งสองเพราะทั้งคู่อธิบายว่าเป็นการดูทราฟฟิก แต่การดักจับสร้างไฟล์และเส้นทางแพ็กเก็ตสร้างการตัดสิน

การเปลี่ยนแปลงแอปพลิเคชันอยู่ในแอปพลิเคชัน

เมื่อเป้าหมายคือเปลี่ยนสิ่งที่คำขอมีอยู่หรือวิธีสร้างการตอบกลับ สถานที่ที่ถูกต้องคือบริการเองหรือพร็อกซีที่สิ้นสุดโปรโตคอลโดยเจตนา องค์ประกอบเหล่านั้นเข้าใจคำขอ การตอบกลับ และการพิสูจน์ตัวตนที่แอปพลิเคชันคาดหวังอยู่แล้ว และนั่นคือบริบทที่ตัวกรองแพ็กเก็ตขาด

การแปลที่อยู่อยู่ท้ายรายการนี้ด้วยเหตุผล เพราะมันเขียนที่อยู่และพอร์ตใหม่และปล่อยเพย์โหลดไว้ ไม่ใช่เครื่องมือเนื้อหาไม่ว่าจะปรากฏบ่อยเพียงใดในสูตรที่กล่าวถึงเนื้อหาด้วย

การแยกขอบเขตเหล่านี้ไว้คือสิ่งที่ทำให้การออกแบบอธิบายได้ โยบายเซสชันในฮุก การจัดการแพ็กเก็ตบนเส้นทางแพ็กเก็ต และการเปลี่ยนแอปพลิเคชันในที่ที่โปรโตคอลสิ้นสุดโดยเจตนา สามประโยคที่ใช้เป็นรายการตรวจสอบสำหรับการทบทวนได้ด้วย

ที่ที่ TLS ยังสิ้นสุดบทสนทนา

สิ่งหนึ่งอยู่รอดจากทั้งหมดข้างต้น ทราฟฟิกในอุโมงค์ที่บรรทุก HTTPS รักษาการเข้ารหัสการขนส่งของตัวเอง การมีกุญแจของ VPN ให้แพ็กเก็ต IP ภายในแก่คุณ และไม่ได้ให้กุญแจเซสชันของเว็บไซต์ที่ปลายอีกด้าน

นั่นคือเหตุผลที่ฮุกตรวจเนื้อหาไม่ได้แม้แต่ในหลักการ และนั่นคือเหตุผลที่เส้นทางแพ็กเก็ตเห็นข้อความที่เข้ารหัส เว้นแต่การติดตั้งจะสิ้นสุด TLS ภายในโดยเจตนา สัญญาสคริปต์ อธิบายสิ่งที่มอบให้ฮุก ไม่ได้กล่าวถึงเพย์โหลดเลยเพราะไม่มีเพย์โหลดให้มอบ

บทความที่เกี่ยวข้อง