Mô-đun Bộ lọc PHP đã bị xóa khỏi lõi Drupal vì sử dụng không đúng cách sẽ gây ra sự cố bảo mật. Các vấn đề bảo mật đã được giảm thiểu từ thực tế là chỉ những người dùng có sử dụng PHP để cài đặt quyền có thể sử dụng bộ lọc đầu vào, nhưng điều đó không làm sạch mã do người chỉnh sửa nhập. Nếu sau đó quyền được trao vô điều kiện cho mọi biên tập viên, thì có nghĩa là quyền đó không tồn tại.
Mô-đun lõi Drupal hiện có sẵn dưới dạng PHP mô-đun, nhưng tôi sẽ không sử dụng nó.
tôi thà làm gì Hudri đề xuất, và sử dụng Bộ lọc mã thông báo mô-đun. Với mô-đun đó và thêm bộ lọc đầu vào của nó vào định dạng đầu vào được sử dụng cho các nút, người dùng có thể nhập mã thông báo sẽ được thay thế bằng giá trị của nó. Thay vì các đoạn mã PHP, tôi sẽ triển khai các mã thông báo tùy chỉnh được thay thế bằng giá trị được trả về từ mã PHP được thực thi trong hook_tokens()
, một trong những hook cần thiết cho các mô-đun muốn triển khai mã thông báo tùy chỉnh.
hàm mymodule_token_info() {
$loại = [
'tên' => t('Mã thông báo tùy chỉnh'),
'description' => t('Mã thông báo tùy chỉnh để sử dụng trong trường thân nút.'),
];
// Mã thông báo toàn cầu tùy chỉnh.
$custom['custom01'] = [
'tên' => t("Tùy chỉnh 01"),
];
$custom['custom02'] = [
'tên' => t("Tùy chỉnh 02"),
];
trở lại [
'các loại' => [
'tùy chỉnh' => $type,
],
'mã thông báo' => [
'tùy chỉnh' => $ tùy chỉnh,
],
];
}
function mymodule_tokens($type, $tokens, mảng $data, mảng $options, BubbleableMetadata $bubbleable_metadata) {
$replacements = [];
nếu ($type == 'tùy chỉnh') {
foreach ($tokens as $name => $ original) {
nếu ($name == 'custom01') {
$replacements[$ original] = // Đặt giá trị của mã thông báo custom01.
}
otherif ($name == 'custom02') {
$replacements[$ original] = // Đặt giá trị của mã thông báo custom02.
}
}
}
trả lại $replacements;
}
hook_tokens()
cũng có thể trả về đánh dấu HTML được sử dụng cho trường thân nút. $bubbleable_metadata
có thể được sử dụng để thêm các phụ thuộc bộ đệm.
Phương pháp này an toàn hơn vì nó không cho phép người dùng nhập mã PHP tùy ý, mã này có thể thay đổi mật khẩu cho bất kỳ tài khoản người dùng nào, xóa tất cả nội dung trang hoặc gửi thông tin người dùng đến các trang bên ngoài.
Ngay cả khi chỉ những người dùng đáng tin cậy mới được phép sử dụng bộ lọc đầu vào PHP, vẫn luôn có khả năng mã đã nhập gây ra sự cố.