ฉันต้องการตรวจสอบให้แน่ใจว่าข้อมูลทั้งหมดในปลั๊กอิน / ชุดรูปแบบของฉันได้รับการจัดการอย่างปลอดภัยก่อนที่จะเข้าสู่ฐานข้อมูลและก่อนที่จะส่งออกไปยังเบราว์เซอร์ ปัญหาของฉันคือมีสถานการณ์ที่ API จัดการการฆ่าเชื้อสำหรับคุณ - เช่นเมื่อบันทึกเขตข้อมูลการโพสต์ - และอื่น ๆ ที่ผู้เขียนปลั๊กอิน / ชุดรูปแบบมีความรับผิดชอบทั้งหมดในการทำเช่น - เมื่อบันทึกการตั้งค่าที่กำหนดเอง
สำหรับขอบเขตของคำถามนี้ฉันไม่กังวลเกี่ยวกับการตรวจสอบข้อมูลในระดับโดเมน - เช่นการตรวจสอบว่าฟิลด์ Age บนฟอร์มอยู่ระหว่าง 0 ถึง 120 หรือที่อยู่อีเมลนั้นถูกต้อง ฉันกังวลเกี่ยวกับความปลอดภัยเท่านั้น - เช่นการหลีกเลี่ยงการสืบค้น SQL เพื่อหลีกเลี่ยงการฉีด SQL เมื่อบันทึกลงในฐานข้อมูลหรือฆ่าข้อมูลที่ส่งออกไปยังเทมเพลต HTML เพื่อหลีกเลี่ยง XSS
สำหรับการฆ่าเชื้อด้วยเอาท์พุตฉันรู้ว่าคุณจำเป็นต้องใช้ฟังก์ชั่นเช่นesc_html()
และesc_attr()
เมื่อสะท้อนตัวแปรในเทมเพลต HTML แต่แล้วเมื่อใช้แท็กเทมเพลตล่ะ พวกเขาทั้งหมดสะอาดผลลัพธ์แล้วหรือไม่ ถ้าเป็นเช่นนั้นสำหรับบริบทใด (HTML ทั่วไปแอตทริบิวต์ของแท็ก ฯลฯ ) บางฟังก์ชั่นมีตัวแปรสำหรับบริบทที่แตกต่างกัน (เช่นthe_title_attribute()
แต่ส่วนใหญ่ไม่มี
สำหรับการฆ่าเชื้ออินพุตฉันรู้ว่าฉันต้องใช้$wpdb->prepare()
เมื่อสร้างเคียวรีแบบแมนนวล แต่ถ้าใช้ API การตั้งค่าเพื่อสร้างหน้าการตั้งค่าปลั๊กอินหรือบันทึกเขตข้อมูลเมตาโพสต์สำหรับประเภทโพสต์ที่กำหนดเอง
ตอนนี้ฉันเพิ่งขุดผ่าน Core และการอ่านบทช่วยสอนทุกครั้งที่ฉันใช้ฟังก์ชั่นเพื่อตรวจสอบว่ามันฆ่าเชื้อหรือไม่ ฉันหวังว่าจะได้พบกับรายการที่ครอบคลุมบางส่วนเกี่ยวกับสถานการณ์ที่เป็นไปได้ทั้งหมดและไม่ว่า API จะจัดการกับมันหรือไม่ก็ตาม เช่น,
API ตรวจสอบ / ฆ่าเชื้อ
- กำลังบันทึกเมตาโพสต์ด้วย
update_postmeta()
- กำลังบันทึกเมตาผู้ใช้ด้วย
update_user_meta()
- เอาท์พุทชื่อโพสต์ - ใช้ตัวแปรที่เหมาะสมตามบริบทของ
the_title()
- ฯลฯ
คุณต้องตรวจสอบ / ฆ่าเชื้อด้วยตนเอง
- การบันทึกตัวเลือกปลั๊กอินด้วย API การตั้งค่า
register_setting()
ผ่านการโทรกลับเป็นพารามิเตอร์ที่ 3 - การสืบค้นฐานข้อมูลตรง: Wrap
$wpdb->prepare()
แบบสอบถามใน - การแสดงผลตัวแปรใน HTML การใช้งาน
esc_attr()
,esc_html()
ฯลฯ - ฯลฯ
ฉันสนใจที่จะเข้าใจว่าทำไม API จึงให้มาในบางสถานการณ์ แต่ไม่ใช่ที่อื่น ๆ ฉันสมมติว่ามันมีบางอย่างเกี่ยวกับธรรมชาติของข้อมูลที่ไม่รู้จัก แต่อยากจะฟังคำอธิบายอย่างละเอียด
the_title()
และthe_permalink()
อื่น ๆ ) คุณก็ใช้ได้ แต่ด้วยข้อมูลที่กำหนดเองคุณจะไม่ได้ (เช่นget_post_meta()
) หากสงสัยให้ฆ่าตัวตาย - ไม่สามารถทำให้เสียหายได้