เมื่อ CONNECT ตอบกลับ 200 และ TLS ถอดรหัสไม่ได้ทันที ให้ตรวจสอบไบต์ขอบเขตในตัวเชื่อมต่อก่อนเปลี่ยนใบรับรองหรือไซเฟอร์

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

คำขอ HTTP/1.1 CONNECT ขั้นต่ำใช้ CRLF ระหว่างบรรทัดและบรรทัดว่างที่ท้าย:

b"CONNECT example.com:443 HTTP/1.1\r\nHost: example.com:443\r\n\r\n"

วางฟิลด์อนุญาตใด ๆ ไว้ก่อนบรรทัดว่างสุดท้ายนั้น โดยไม่มีการขึ้นบรรทัดใหม่ภายใน ใน Python "\n" แทนบรรทัดใหม่ ส่วนสตริงดิบที่มีแบ็กสแลชและตัวอักษร n ไม่แทน ตรวจสอบว่าไบต์ใดที่ตัวช่วยเข้ารหัสสร้างก่อนพยายามลบออก—ตัวช่วยรุ่นเก่าอาจเพิ่มการขึ้นบรรทัดใหม่

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

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

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

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