อย่างไรและเมื่อใดที่จะใช้ filter_xss () และ check_plain ()


11

มีไฟล์เทมเพลตมากมายเช่นนี้views-view-fields--magazine--magazine.tpl.phpในเว็บไซต์ของฉัน ฉันควรใช้ filter_xss () และ check_plain () อย่างไรเพื่อปรับปรุงความปลอดภัย เช่นนี้เป็นรหัส:

<div>
    <div class="bf-header bf-article-header"><?php print $fields['title']->content; ?></div>
    <div class="bf-article-body"><?php print $fields['field_magazine_body']->content;?></div>
    <div class="bf-article-image"><?php print $fields['field_magazine_image']->content;?></div>
</div>
<div class="separator article-view-separator"></div>

ฉันจะใช้ฟังก์ชันเหล่านั้นได้อย่างไร


ใช้filter_xss()เมื่อคุณต้องการกรอง XSS จากเนื้อหาที่อาจเป็นอันตราย (เช่นเนื้อหาจากผู้ใช้ที่ไม่น่าเชื่อถือ) และcheck_plain()เมื่อคุณต้องการหลีกเลี่ยงอักขระพิเศษ HTML จากสตริง
Clive

คำตอบ:


13

ก่อนอื่นให้อ่านเกี่ยวกับสิ่งเหล่านี้ใน Drupal API:

ดังนั้นcheck_plain()เข้ารหัสอักขระพิเศษที่มีความหมายพิเศษใน HTML (เช่น<และ&) ลงในเอนทิตีข้อความธรรมดา (เช่น&lt;และ&amp;ตามลำดับ) ที่จะทำให้สิ่งเหล่านี้แสดงผลอย่างแท้จริง (ไม่ตีความเป็น 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" หรือ "ธรรมดา" คุณต้องใช้ฟังก์ชันเหล่านี้เพื่อวัตถุประสงค์ด้านสุขอนามัย


ฉันจะตรวจสอบอินพุตที่มาจากผู้ใช้ได้ที่ไหน ตัวอย่างเช่นมีประเภทเนื้อหาและผู้ใช้ที่ไม่ระบุชื่อได้รับอนุญาตให้สร้างโหนดประเภทนั้น
M ama D

@Drupalist คุณไม่ควรอนุญาตให้ผู้ใช้ Anonymous ใช้รูปแบบข้อความ "ไม่ปลอดภัย" นำทางไป»การดูแลการตั้งค่าคอนฟิก»เขียนเนื้อหา»รูปแบบข้อความ รูปแบบข้อความ "ปลอดภัย" ที่มาพร้อมกับ Drupal คือ "HTML ที่กรองแล้ว" และ "ข้อความธรรมดา" ถ้าสิ่งเหล่านี้เป็นเพียงรูปแบบที่ได้รับอนุญาตสำหรับผู้ใช้ที่ไม่ระบุชื่อ Drupal ดำเนินการตรวจสอบที่จำเป็นสำหรับคุณสำหรับการใด ๆ ในตัวชนิดและประเภทของโหนดโหนดใด ๆ ที่คุณสร้างขึ้นด้วยหลักทุ่งคุณลักษณะ หากกรณีการใช้งานของคุณแตกต่างจากนี้ให้ถามคำถามใหม่ที่สะกดกรณีการใช้งาน
Radical ฟรี

ผู้ใช้นิรนามได้รับอนุญาตให้ใช้งานเท่านั้นplain text
M ama D

@Drupalist ไม่เป็นไร ไม่จำเป็นต้องใช้ฟังก์ชั่นเหล่านี้เพื่อฆ่าเชื้อข้อความล้วน
ฟรี Radical

3
@ARUN ไม่ มาตรฐานการปฏิบัติ Drupal คือการเสมอบันทึกสิ่งที่ผู้ใช้ชนิดใน DB และข้อความ sanitize ก่อนการแสดงผล
ฟรี Radical
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.