เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ · ตัวถอดรหัส JWT
RFC 8725 อธิบาย: JWT วิธีปฏิบัติที่ดีที่สุดในปัจจุบันสำหรับผู้ตรวจสอบ
· พื้นหลัง
jwt ความปลอดภัย การรับรองความถูกต้อง
IETF ได้รวบรวมข้อผิดพลาด JWT ที่ทราบมาไว้ในเอกสารแนวทางปฏิบัติที่ดีที่สุดฉบับเดียว โพสต์นี้จะอธิบายคำแนะนำและเชื่อมโยงแต่ละระดับของเหตุการณ์ที่ป้องกัน
ความล้มเหลว JWT ที่เกิดซ้ำจะกระตุ้นให้เกิดรายการตรวจสอบของผู้ตรวจสอบ แหล่งเก็บข้อมูลไม่ได้สร้างประวัติการตีพิมพ์
รูปแบบโทเค็นที่ยืดหยุ่นอนุญาตให้มีการผสมผสานที่ผู้ตรวจสอบต้องจำกัด ข้อผิดพลาดซ้ำๆ ได้แก่ การเชื่อถืออัลกอริทึม การยอมรับโทเค็นภายใต้ผู้ออกหรือผู้ชมที่ไม่ถูกต้อง และการติดตามเนื้อหาหลักที่ผู้โจมตีเลือก รายการตรวจสอบจะแปลงความเสี่ยงกว้างๆ เหล่านั้นเป็นการทดสอบการปฏิเสธที่ขอบเขตการยอมรับจริง
โครงร่างจะระบุประวัติการตีพิมพ์สำหรับปีใดปีหนึ่ง แต่แหล่งที่มาของพื้นที่เก็บข้อมูลไม่ได้ตรวจสอบประวัตินั้น ดังนั้นส่วนนี้จึงละเว้น ความแตกต่างที่สามารถดำเนินการได้ถูกสร้างขึ้นในเครื่อง: ToolAcre ถอดรหัสเท่านั้น ในขณะที่การตัดสินใจเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดทุกครั้งเป็นของผู้ตรวจสอบที่กำหนดค่าไว้
ปักหมุดอัลกอริธึมและปฏิเสธไม่เลย — คำแนะนำที่จัดการกับ alg:none และความสับสนของคีย์
ปักหมุดอัลกอริธึมที่ได้รับอนุญาตอย่างเป็นอิสระจากส่วนหัว และปฏิเสธอินพุตที่ไม่ได้ลงนามในโฟลว์ที่ต้องมีลายเซ็น เชื่อมโยงแต่ละตระกูลอัลกอริทึมที่ยอมรับเข้ากับประเภทคีย์ที่ถูกต้อง อย่าปล่อยให้โทเค็นเปลี่ยนตัวตรวจสอบจากการตรวจสอบแบบไม่สมมาตรเป็น HMAC หรือปิดการใช้งานการตรวจสอบด้วย `none`
ToolAcre ตั้งค่าสถานะ `none` และอธิบายป้ายกำกับที่รู้จัก แต่คำเตือนเหล่านั้นไม่ได้บังคับใช้อะไรเลย พิสูจน์นโยบายที่แท้จริงด้วยการทดสอบเชิงลบกับแบ็กเอนด์: อัลกอริธึมที่ไม่คาดคิด ลายเซ็นที่ว่างเปล่า และประเภทคีย์ที่ไม่ถูกต้องจะต้องล้มเหลว แม้ว่าสองส่วนแรกจะยังคงสามารถถอดรหัสได้
ตรวจสอบความถูกต้องของผู้ชมและผู้ออก — คำแนะนำสำหรับการเล่นซ้ำข้ามบริการ
ตรวจสอบความถูกต้องของผู้ออกภายใต้การกำหนดค่าคีย์ที่เชื่อถือได้ จากนั้นเปรียบเทียบกลุ่มเป้าหมายที่ต้องการกับบริการที่ใช้งาน ลายเซ็นที่ถูกต้องโดยไม่มีการตรวจสอบการอ้างสิทธิ์ตามบริบทยังคงสามารถให้สิทธิ์โทเค็นในตำแหน่งที่ไม่ถูกต้องได้ สตริงผู้ออกที่คัดลอกโดยตัวมันเองไม่ใช่การผูกคีย์
ตัวถอดรหัสแสดงค่า `iss` และ `aud` โดยไม่ทราบการกำหนดค่าที่คาดหวัง ใช้การมองเห็นนั้นเพื่อระบุกรณีทดสอบ ไม่ใช่เพื่อตัดสิน การทดสอบการยอมรับควรแยกแยะผู้ออกผิด กลุ่มเป้าหมายผิด และลายเซ็นล้มเหลว เพื่อให้บันทึกการปฏิบัติงานยังคงมีประโยชน์
ใช้การพิมพ์ที่ชัดเจน — ส่วนหัวของการพิมพ์เพื่อป้องกันการทดแทนโทเค็น
การพิมพ์โทเค็นที่ชัดเจนสามารถแยกโปรไฟล์ที่ใช้รูปแบบการอ้างสิทธิ์ที่คล้ายกันซ้ำได้ ผู้ตรวจสอบควรทราบว่าต้องการประเภทใดสำหรับปลายทางหนึ่งๆ และปฏิเสธโปรไฟล์ที่เข้ากันไม่ได้ แทนที่จะถือว่า JWT ที่เซ็นชื่อทุกรายการสามารถใช้แทนกันได้
ส่วนหัว `typ` ยังคงไม่น่าเชื่อถือจนกว่าจะได้รับการยืนยัน และ ToolAcre เตือนเฉพาะเมื่อสตริงแตกต่างจาก `JWT` มันไม่ได้ตรวจสอบโปรไฟล์โทเค็นการเข้าถึง เนื้อหาที่ซ้อนกัน หรือแบบแผนของผู้ให้บริการ กำหนดกฎประเภทในแอปพลิเคชันและทดสอบการทดแทน
อย่าเชื่อถือคีย์ jku, x5u หรือฝังตัว — คำแนะนำจากแหล่งคีย์
อย่าปล่อยให้ `jku`, `x5u` ข้อมูล JWK แบบฝัง หรืออาร์เรย์ใบรับรองสร้างแหล่งข้อมูลคีย์เพียงเพราะว่าปรากฏในส่วนหัวที่ได้รับการป้องกัน แก้ไขคีย์ผ่านความสัมพันธ์ของผู้ออกที่เชื่อถือได้อย่างอิสระและนโยบายการดึงข้อมูลที่มีข้อจำกัด ถือว่า `kid` เป็นตัวเลือกภายในขอบเขตนั้นเท่านั้น
ToolAcre ไม่มีการค้นหาเครือข่ายจากค่าส่วนหัว นั่นเป็นพฤติกรรมที่ถูกต้องสำหรับผู้ตรวจสอบทั่วไป ในระหว่างการตรวจสอบ ให้ติดตามทุกเส้นทางตั้งแต่ข้อมูลเมตาของส่วนหัวไปจนถึงการดำเนินงานของระบบไฟล์ แคช ฐานข้อมูล และเครือข่าย จากนั้นปฏิเสธเส้นทางใดๆ ที่สร้างความน่าเชื่อถือจากอินพุตที่ควบคุมด้วยโทเค็น
ต้องตรวจสอบอินพุตที่เข้ารหัสและคำแนะนำเนื้อหาที่เข้ารหัสในไลบรารีและโปรไฟล์ที่เลือก
การใช้งานการเข้ารหัสจะต้องตรวจสอบอินพุตและปฏิบัติตามกฎของโปรไฟล์ที่เลือก การออกแบบการเข้ารหัสยังต้องการการดูแลเกี่ยวกับการบีบอัดและข้อมูลที่สังเกตได้ API และค่าเริ่มต้นที่แน่นอนเป็นข้อมูลเฉพาะของไลบรารีและไม่มีอยู่ในพื้นที่เก็บข้อมูลนี้ ดังนั้นบทความนี้จึงไม่สร้างสวิตช์หรืออ้างสิทธิ์ในการสนับสนุนแบบสากล
อ่านเอกสารประกอบปัจจุบันสำหรับไลบรารีและเวอร์ชันที่ใช้งาน จากนั้นสร้างการทดสอบอินพุตที่มีรูปแบบไม่ถูกต้องและนโยบายที่ไม่ตรงกัน ข้อผิดพลาด INVALID_JWT ที่ชัดเจนของตัวถอดรหัสแสดงให้เห็นถึงหลักสรีรศาสตร์ในการตรวจสอบที่ดี แต่ก็ไม่ใช่หลักฐานว่าเครื่องมือตรวจสอบที่แยกต่างหากจัดการกับกรณีขอบของการเข้ารหัสอย่างถูกต้อง
ตัวอย่างการทำงาน — การตรวจสอบขั้นตอนการตรวจสอบกับรายการตรวจสอบ
ตรวจสอบขั้นตอนการตรวจสอบโดยแสดงรายการการกำหนดค่าของผู้ออกที่เชื่อถือได้ อัลกอริธึมที่ยอมรับ แหล่งที่มาหลัก กลุ่มเป้าหมาย ประเภทโทเค็น นโยบายเวลา และการอ้างสิทธิ์แอปพลิเคชัน สำหรับแต่ละรายการ ให้เพิ่มโทเค็นเชิงลบที่สามารถอ่านได้ทางไวยากรณ์แต่ละเมิดความคาดหวังประการเดียว ยืนยันการปฏิเสธที่ขอบเขตจริง
ใช้ ToolAcre เพื่อตรวจสอบสิ่งที่แต่ละฟิกซ์เจอร์อ้างสิทธิ์เท่านั้น และให้แน่ใจว่ามีการกลายพันธุ์ที่ตั้งใจไว้ อย่าใช้เอาต์พุตเป็นการยืนยันว่าฟิกซ์เจอร์ไม่ถูกต้อง การตอบสนองและบันทึกของผู้ตรวจสอบจะให้หลักฐานดังกล่าว ในขณะที่ตัวถอดรหัสยังคงที่สำหรับตัวอย่างที่ยอมรับและปฏิเสธ
ประเด็นสำคัญ: รายการตรวจสอบ ไม่ใช่ไลบรารี — ตัวถอดรหัส ToolAcre JWT ช่วยคุณตรวจสอบโทเค็นระหว่างการตรวจสอบ แนวทางปฏิบัตินำไปใช้กับผู้ตรวจสอบที่คุณเขียน
เอกสารแนวทางปฏิบัติที่ดีที่สุดคือรายการตรวจสอบ ไม่ใช่คลังข้อมูลการยืนยัน ค่าของมันจะปรากฏขึ้นเมื่อทีมแปลคำแนะนำเป็นการกำหนดค่าที่ชัดเจน ลดความสัมพันธ์ที่เชื่อถือได้ และการทดสอบที่ปิดไม่สำเร็จ ตัวถอดรหัสสามารถทำให้อินพุตโทเค็นอ่านได้ระหว่างการทำงานนั้น แต่ไม่สามารถใช้การควบคุมได้
รักษาขอบเขตในเอกสารและ UI: ถอดรหัสหมายถึงสามารถอ่านได้ ไม่ใช่ของแท้ ไม่มีการแก้ไข ได้รับอนุญาต หรือยอมรับได้ ปักหมุดนโยบายไว้นอกโทเค็น ตรวจสอบก่อน และใช้การอ้างสิทธิ์เป็นลำดับที่สอง ToolAcre จงใจหยุดก่อนการตัดสินใจทั้งหมดเหล่านั้น