โมดูลตัวกรอง PHP ถูกลบออกจาก Drupal core เนื่องจากการใช้งานอย่างไม่ถูกต้องอาจทำให้เกิดปัญหาด้านความปลอดภัย ปัญหาด้านความปลอดภัยลดลงจากการที่ผู้ใช้เท่านั้นที่มี ใช้ PHP สำหรับการตั้งค่า การอนุญาตสามารถใช้ตัวกรองอินพุตได้ แต่นั่นไม่ได้ทำให้รหัสที่ป้อนโดยบรรณาธิการ ถ้ามีการอนุญาตแบบไม่มีเงื่อนไขให้กับเอดิเตอร์ทุกคน ก็เหมือนกับว่าไม่มีการอนุญาตนั้น
โมดูลหลักของ Drupal พร้อมใช้งานแล้วในชื่อ พี.เอช.พี โมดูล แต่ฉันจะไม่ใช้มัน
ฉันค่อนข้างจะทำอะไร Hudri แนะนำ, และใช้ ตัวกรองโทเค็น โมดูล. ด้วยโมดูลนั้น และเพิ่มตัวกรองอินพุตให้กับรูปแบบการป้อนข้อมูลที่ใช้สำหรับโหนด ผู้ใช้สามารถป้อนโทเค็นซึ่งจะถูกแทนที่ด้วยค่าของมัน แทนที่จะใช้ตัวอย่าง PHP ฉันจะใช้โทเค็นที่กำหนดเองซึ่งแทนที่ด้วยค่าที่ส่งคืนจากโค้ด PHP ที่ดำเนินการใน hook_tokens()
ซึ่งเป็นหนึ่งในตะขอที่จำเป็นสำหรับโมดูลที่ต้องการใช้โทเค็นแบบกำหนดเอง
ฟังก์ชัน mymodule_token_info() {
$ประเภท = [
'name' => t('โทเค็นแบบกำหนดเอง'),
'description' => t('โทเค็นแบบกำหนดเองเพื่อใช้ในฟิลด์เนื้อหาของโหนด'),
];
// โทเค็นสากลที่กำหนดเอง
$กำหนดเอง['กำหนดเอง01'] = [
'ชื่อ' => t("กำหนดเอง 01"),
];
$กำหนดเอง['กำหนดเอง02'] = [
'ชื่อ' => t("กำหนดเอง 02"),
];
กลับ [
'ประเภท' => [
'กำหนดเอง' => $ประเภท,
]
'โทเค็น' => [
'กำหนดเอง' => $กำหนดเอง
]
];
}
ฟังก์ชัน mymodule_tokens ($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) {
$แทนที่ = [];
ถ้า ($ ประเภท == 'กำหนดเอง') {
foreach ($ โทเค็นเป็น $name => $original) {
ถ้า (ชื่อ $ == 'กำหนดเอง 01') {
$replacements[$original] = // ตั้งค่าของโทเค็น custom01
}
อื่น (ชื่อ $ == 'กำหนดเอง 02') {
$replacements[$original] = // ตั้งค่าของโทเค็น custom02
}
}
}
ส่งคืน $replacements;
}
hook_tokens()
ยังสามารถส่งคืนมาร์กอัป HTML ที่ใช้สำหรับฟิลด์เนื้อหาของโหนด $bubbleable_metadata
สามารถใช้เพื่อเพิ่มการพึ่งพาแคช
วิธีนี้ปลอดภัยกว่า เนื่องจากไม่อนุญาตให้ผู้ใช้ป้อนรหัส PHP โดยอำเภอใจ ซึ่งอาจทำให้เปลี่ยนรหัสผ่านสำหรับบัญชีผู้ใช้ใดๆ ลบเนื้อหาทั้งหมดของไซต์ หรือส่งข้อมูลผู้ใช้ไปยังไซต์ภายนอกได้
แม้ว่าผู้ใช้ที่เชื่อถือได้เท่านั้นที่ได้รับอนุญาตให้ใช้ตัวกรองอินพุตของ PHP แต่ก็มีโอกาสที่โค้ดที่ป้อนจะทำให้เกิดปัญหาได้เสมอ