ก่อนอื่นให้อ่านเกี่ยวกับสิ่งเหล่านี้ใน Drupal API:
ดังนั้นcheck_plain()
เข้ารหัสอักขระพิเศษที่มีความหมายพิเศษใน HTML (เช่น<
และ&
) ลงในเอนทิตีข้อความธรรมดา (เช่น<
และ&
ตามลำดับ) ที่จะทำให้สิ่งเหล่านี้แสดงผลอย่างแท้จริง (ไม่ตีความเป็น HTML) เมื่อสตริงนั้นถูกแสดงเป็นส่วนหนึ่งของหน้า แบบ HTML มาร์กอัป ฟังก์ชันfilter_xss()
กรองสตริง HTML เพื่อป้องกันช่องโหว่ข้ามสคริปต์ (XSS) มันทำสี่สิ่ง:
- การลบตัวอักษรและโครงสร้างที่สามารถหลอกเบราว์เซอร์ได้
- ตรวจสอบให้แน่ใจว่าเอนทิตี HTML ทั้งหมดมีรูปแบบที่ดี
- ตรวจสอบให้แน่ใจว่าแท็กและแอตทริบิวต์ HTML ทั้งหมดมีรูปแบบที่ถูกต้อง
- ตรวจสอบให้แน่ใจว่าไม่มีแท็ก HTML ที่ประกอบด้วย URL ที่มีโปรโตคอลที่ไม่อนุญาต (เช่น javascript :)
ทั้งสองฟังก์ชั่นใช้ในการฆ่าเชื้อข้อมูลจากผู้ใช้เพื่อให้แน่ใจว่าการฉีดของผู้ใช้จะถูกทำให้เป็นกลางก่อนที่จะมีการแสดงข้อมูลบนไซต์ของคุณ
คุณไม่เคยผ่านสายเดียวกันผ่านทั้งสอง
หากคุณใช้check_plain()
สตริงที่ส่งผ่านไปยังฟังก์ชันควรจะใช้เป็นข้อความธรรมดา (ไม่ใช่ HTML) จากนั้นfilter_xss()
ไม่จำเป็นเนื่องจากcheck_plain()
มักจะทำให้สตริงข้อความธรรมดา
หากคุณใช้filter_xss()
สตริงที่ส่งผ่านไปยังฟังก์ชันควรจะเป็น HTML และcheck_plain()
จะทำให้ยุ่งเหยิง
เมื่อฉันดูเทมเพลตที่คุณใช้เป็นตัวอย่างมันจะปรากฏแก่ฉันราวกับว่าทั้งสามฟิลด์ผ่านไปprint()
มาจากเนื้อหาที่ผ่านการฆ่าเชื้อแล้วและไม่จำเป็นต้องมีสุขอนามัยอีกต่อไป
อย่างไรก็ตามหากคุณสร้างโมดูลของคุณเองที่รวบรวมอินพุตของผู้ใช้โดยไม่ต้องผ่านตัวกรองข้อความ "ปลอดภัย" เช่น "Filtered HTML" หรือ "ธรรมดา" คุณต้องใช้ฟังก์ชันเหล่านี้เพื่อวัตถุประสงค์ด้านสุขอนามัย
filter_xss()
เมื่อคุณต้องการกรอง XSS จากเนื้อหาที่อาจเป็นอันตราย (เช่นเนื้อหาจากผู้ใช้ที่ไม่น่าเชื่อถือ) และcheck_plain()
เมื่อคุณต้องการหลีกเลี่ยงอักขระพิเศษ HTML จากสตริง