Score:-1

แทรกตัวอย่าง PHP ในเนื้อหา

ธง in

Drupal 9 ไม่มีโมดูลตัวกรอง PHP เป็นแกนหลัก ฉันต้องแทรกตัวอย่าง PHP ในตัวแก้ไขเนื้อหา (เช่น ตัวแปร Twig)

มีวิธีการแทรกตัวอย่าง PHP ในเนื้อหา Drupal หรือไม่?

ru flag
ไม่ คุณทำไม่ได้ นี่อาจเป็นปัญหาด้านความปลอดภัย *ใหญ่หลวง* ใช้ [ตัวกรองโทเค็น](https://www.drupal.org/project/token_filter) แทน โมดูลนี้อนุญาตสิ่งต่างๆ เช่น ``
Kevin avatar
in flag
ทำสิ่งนี้ด้วยโทเค็น นี่เป็นการปฏิบัติที่ไม่ดีเป็นพิเศษ
Score:1
ธง us

โมดูลตัวกรอง 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 แต่ก็มีโอกาสที่โค้ดที่ป้อนจะทำให้เกิดปัญหาได้เสมอ

Alfred Armstrong avatar
cn flag
ใช่ แม้ว่าคุณจะไว้วางใจผู้ใช้ที่ได้รับอนุญาตให้แทรก PHP ไซต์ของคุณอาจเสียหายได้อย่างสมบูรณ์จากข้อผิดพลาดทางไวยากรณ์

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา