check_plain () เพียงพอหรือไม่


16

คือcheck_plain ()เพียงพอสำหรับอีกการแสดงข้อความที่ป้อนโดยผู้ใช้ในเบราว์เซอร์หรือควรฉันยังคงกรองที่มีfilter_xss () ?

คำตอบ:


26

ผมคิดว่าเป็นคำถามที่เกี่ยวกับการใช้หรือcheck_plain(filter_xss($string))filter_xss(check_plain($string))

check_plain()และfilter_xss()มีจุดประสงค์ที่แตกต่างกันสองประการและตรงกันข้าม:

  • check_plain() เข้ารหัสอักขระพิเศษในสตริงข้อความธรรมดาที่แสดงเป็น HTML
  • filter_xss()กรองสตริง HTML เพื่อป้องกันช่องโหว่ cross-site-scripting (XSS) โดยเฉพาะอย่างยิ่งจุดประสงค์ของมันคือ:

    • การลบตัวอักษรและโครงสร้างที่สามารถหลอกเบราว์เซอร์ได้
    • ตรวจสอบให้แน่ใจว่าเอนทิตี HTML ทั้งหมดมีรูปแบบที่ถูกต้อง
    • ตรวจสอบให้แน่ใจว่าแท็กและแอตทริบิวต์ HTML ทั้งหมดมีรูปแบบที่ถูกต้อง
    • ตรวจสอบให้แน่ใจว่าไม่มีแท็ก HTML ที่ประกอบด้วย URL ที่มีโปรโตคอลที่ไม่อนุญาต (เช่น javascript :)

หากคุณใช้check_plain()สตริงที่ส่งผ่านไปยังฟังก์ชันควรถูกใช้เป็นข้อความธรรมดา ในกรณีเช่นนี้filter_xss()ไม่จำเป็น หากคุณใช้งานfilter_xss()สตริงที่ส่งผ่านไปยังฟังก์ชันควรจะเป็น HTML และcheck_plain()ไม่จำเป็น

หากคำถามเกี่ยวกับการใช้check_plain()และfilter_xss()ในส่วนต่าง ๆ ของสตริงเดียวกันเมื่อ Greggles ชี้ให้เห็นในความคิดเห็นของเขาคุณสามารถใช้ (ตัวอย่าง) check_plain()ในเนื้อหาของแอตทริบิวต์แท็กและfilter_xss()ในแท็ก HTML ทั้งหมด


5
filter_xss มีวัตถุประสงค์เพื่อใช้กับชิ้นส่วน html ทั้งหมด หากคุณใช้ filter_xss กับแอตทริบิวต์ html จะไม่สามารถกรองได้อย่างถูกต้อง check_plain สามารถใช้เพื่อกรองคุณลักษณะ html ได้อย่างปลอดภัย ดูเพิ่มเติมที่drupalscout.com/knowledge-base/…และdrupalscout.com/knowledge-base/…สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ฟังก์ชันเหล่านี้
greggles
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.