ไทย

เครื่องมือสำหรับนักพัฒนา · HTML ตัวหนีเอนทิตี

เหตุใดการหลบหนี HTML จึงไม่เพียงพอภายในสคริปต์ คุณลักษณะ onclick และ href

· เหตุใดจึงสำคัญ

html ความปลอดภัย การเข้ารหัส URL

เหตุใดการหลบหนี HTML จึงไม่เพียงพอภายในสคริปต์ คุณลักษณะ onclick และ href ที่แสดงเป็นไดอะแกรมอ้างอิงอักขระที่ปลอดภัยสำหรับเบราว์เซอร์
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

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

ค่า Escape ที่ยังคงดำเนินการอยู่ — สตริงผู้ใช้ภายในตัวจัดการ onclick และเหตุใด " จึงไม่บันทึก

ค่า Escape ที่ยังคงดำเนินการอยู่ — สตริงผู้ใช้ภายในตัวจัดการ onclick และเหตุใด " จึงไม่บันทึก คุณลักษณะ onclick จะถูกแยกวิเคราะห์เป็น HTML จากนั้นคอมไพล์เป็น JavaScript การเข้ารหัสเฉพาะตัวคั่น HTML เท่านั้นที่ยังคงสามารถออกจากโปรแกรมที่เป็นอันตรายได้หลังจากที่เบราว์เซอร์ถอดรหัสค่าแอตทริบิวต์นั้น

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

เอกสารเดียว หลายภาษา — HTML, JavaScript, URL และ CSS ต่างก็มีพาร์เซอร์และกฎการหลีกเป็นของตัวเอง

เอกสารเดียว หลายภาษา — HTML, JavaScript, URL และ CSS ต่างก็มีพาร์เซอร์และกฎการหลีกเป็นของตัวเอง เอกสารเดียวสามารถเรียกใช้ HTML, JavaScript, URL และ CSS parsers แต่ละภาษากำหนดเครื่องหมายวรรคตอนให้ความหมายที่แตกต่างกัน ดังนั้นธง "escaped" ทั่วไปหนึ่งธงจึงไม่สามารถอธิบายจุดหมายปลายทางทุกแห่งได้อย่างปลอดภัย

นักพัฒนาที่หลีกหนีจากทุกสิ่งและยังคงได้รับรายงาน XSS สามารถทดสอบเอกสารหนึ่งภาษาได้หลายภาษาโดยบันทึก URL ของ html javascript และก่อนที่บริบทของ parser ที่ซ้อนกันจะผ่านไป เปรียบเทียบ css แต่ละอันมีหลังจากนั้นและค้นหา parser ที่รับผิดชอบ parser และ Escape ของตัวเอง ผลลัพธ์บริบทจาวาสคริปต์ที่หลีกเลี่ยง HTML นี้อธิบายกฎ ไม่ใช่บริบทที่ปฏิบัติการได้

ข้างใน <script> — เหตุใดเอนทิตีจึงไม่ถูกถอดรหัสที่นั่น และ JSON หรือ JavaScript จำเป็นต้องหลีกสตริงแทน

ข้างใน <script> — เหตุใดเอนทิตีจึงไม่ถูกถอดรหัสที่นั่น และจำเป็นต้องมีการหลีกสตริง JSON หรือ JavaScript แทน ข้อความดิบภายในสคริปต์ HTML การอ้างอิงที่มีชื่อจะไม่ถอดรหัสเหมือนข้อความปกติ ทำให้ข้อมูลเป็นอนุกรมเป็น JSON ด้วยซีเรียลไลเซอร์ที่ได้รับการพิสูจน์แล้ว หลีกเลี่ยงการแก้ไขสคริปต์อินไลน์ และคำนึงถึงลำดับสคริปต์ปิด

แยกสคริปต์ภายในว่าทำไมเอนทิตีในตัวอย่างบริบทของตัวแยกวิเคราะห์ที่ซ้อนกันแบบสั้น การแสดงไม่ได้ถูกถอดรหัสในฐานะแหล่งที่มาตามตัวอักษร ติดตามและ json หรือ javascript ไปยังปลายทาง และตั้งชื่อ API จำเป็นต้องมีการหลีกสตริงการอ่าน สำหรับบริบทจาวาสคริปต์ที่หลีกเลี่ยง HTML จะยังคงเหลือหลักฐานที่ผูกกับพาร์เซอร์แทน

คุณลักษณะตัวจัดการเหตุการณ์ — ถอดรหัสเป็น HTML ก่อนแล้วจึงเรียกใช้เป็น JavaScript ดังนั้นจึงมีการใช้ Escape สองชั้น

คุณลักษณะตัวจัดการเหตุการณ์ — ถอดรหัสเป็น HTML ก่อน จากนั้นจึงเรียกใช้เป็น JavaScript ดังนั้นจึงมีการใช้ Escape สองชั้น คุณลักษณะตัวจัดการเหตุการณ์รวมสองไวยากรณ์และควรหลีกเลี่ยง พฤติกรรมการเชื่อมโยงด้วย addEventListener จะป้องกันไม่ให้ข้อมูลอยู่ในแหล่งที่ปฏิบัติการได้ และลดความจำเป็นในการหลบหนี HTML-plus-JavaScript ที่ซ้อนกัน

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

href และ src — การเข้ารหัสเปอร์เซ็นต์สำหรับค่าบวกเอนทิตีที่หลบหนีสำหรับแอตทริบิวต์ และ javascript: ปัญหาแบบแผน

href และ src — การเข้ารหัสเปอร์เซ็นต์สำหรับค่าบวกเอนทิตีที่ Escape สำหรับแอตทริบิวต์ และ javascript: ปัญหาแบบแผน สำหรับ href และ src ขั้นแรกให้สร้างและตรวจสอบ URL ปฏิเสธรูปแบบที่ไม่ต้องการ ส่วนประกอบเข้ารหัสเปอร์เซ็นต์ จากนั้น HTML-escape ค่าแอตทริบิวต์ที่ยกมาสุดท้าย การแปลงเอนทิตีเพียงอย่างเดียวไม่ปฏิเสธจาวาสคริปต์: URL

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

ตัวอย่างการทำงาน: หนึ่งค่าที่อยู่ในข้อความ ในแอตทริบิวต์ ใน onclick และใน href - การเข้ารหัสที่ถูกต้องสำหรับแต่ละค่า

ตัวอย่างการทำงาน: หนึ่งค่าที่อยู่ในข้อความ ในแอตทริบิวต์ ใน onclick และใน href - การเข้ารหัสที่ถูกต้องสำหรับแต่ละค่า ค่าเดียวกันนี้อยู่ในข้อความผ่านการหลบหนี HTML ในแอตทริบิวต์ข้อมูลผ่านการจัดการแอตทริบิวต์ที่เสนอราคา ในโค้ดผ่านการทำให้เป็นอนุกรมที่มีโครงสร้าง และใน URL ถึง URL โครงสร้างพร้อมการตรวจสอบโครงร่าง

วางตัวอย่างงานหนึ่งค่า วางในข้อความใน และแอตทริบิวต์ใน onclick เคียงข้างกันในระหว่างการตรวจสอบบริบทของ parser ที่ซ้อนกัน นักพัฒนาที่หลีกหนีจากทุกสิ่งทุกอย่างและยังคงได้รับรายงาน XSS จะสามารถตัดสินใจได้ว่าจะทำการเปลี่ยนแปลงที่ Conversion หรือดาวน์สตรีมหรือไม่ เก็บข้อสรุปบริบท JavaScript Escape ของ html เกี่ยวกับการเข้ารหัสที่ถูกต้องสำหรับการอ้างสิทธิ์ด้านความปลอดภัยทั่วไปแต่ละรายการ

สิ่งนี้ไม่ครอบคลุมถึง — CSS ตัวช่วยฉีดและเครื่องมือเฉพาะเทมเพลต

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

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

ประเด็นสำคัญ: เข้ารหัสสำหรับ parser ที่จะอ่าน — วิธีที่ HTML เอนทิตี Escaper จัดการเลเยอร์ HTML และ URL ตัวเข้ารหัสและตัวถอดรหัสในผลิตภัณฑ์เดียวกันจัดการเลเยอร์ URL

ประเด็นสำคัญ: เข้ารหัสสำหรับ parser ที่จะอ่าน — วิธีที่ HTML เอนทิตี Escaper จัดการเลเยอร์ HTML และ URL ตัวเข้ารหัสและตัวถอดรหัสในผลิตภัณฑ์เดียวกันจัดการเลเยอร์ URL ToolAcre ครอบคลุมเลเยอร์ HTML และแผง URL ครอบคลุมการแสดงส่วนประกอบ URL แผงควบคุมไม่ให้สิทธิ์ ฆ่าเชื้อมาร์กอัป ตรวจสอบรูปแบบ หรือปกป้องคำสั่ง SQL

เชื่อมต่อการเข้ารหัส Takeaway สำหรับกับเอาต์พุตบริบทของตัวแยกวิเคราะห์ที่ซ้อนกันที่สังเกตได้ เก็บ parser ที่จะอ่านข้างผลลัพธ์แบบครั้งเดียว จากนั้นตรวจสอบว่า html เข้าสู่เอนทิตี Escape จัดการที่ใด นักพัฒนาที่หลีกหนีทุกสิ่งและยังคงได้รับรายงาน XSS สามารถตรวจสอบเลเยอร์ html และเป็นการค้นหาบริบท javascript ที่หลีกเลี่ยง html แบบแคบได้ การตัดสินใจเชิงปฏิบัติเบื้องหลังบทความนี้มีความเฉพาะเจาะจง: การ Escape เอนทิตีจะปกป้อง HTML ค่าข้อความและแอตทริบิวต์ แต่ค่าภายในบล็อกสคริปต์ ตัวจัดการเหตุการณ์ หรือ URL จะถูกอ่านโดย parser อื่น โพสต์นี้จะอธิบายแต่ละบริบทและการเข้ารหัสที่ต้องการ การทำงานของผู้อ่านเป็นรูปธรรมเท่าเทียมกัน: ลิงก์ไปยังตัวหนีเอนทิตี HTML สำหรับขั้นตอนการ Escape แอตทริบิวต์ และสาธิตการเปลี่ยนไปใช้แผงตัวเข้ารหัสและตัวถอดรหัส URL สำหรับค่า href โดยไม่ต้องโหลดหน้าเว็บ