Как проверить что получаемый код SVG формата? Как очистить/обезопасить загружаемый SVG файл?
Есть необходимость в WordPress перед тем как записать в базу данных сделать проверку, на то является ли передаваемый с фронта элемент svg и не наделает ли он проблем. Нужна проверка на безопасный без сторонних вкладок. Как это можно сделать ? Мой код проверки.
add_action('wp_ajax_save_svg_content', 'save_svg_content_callback'); function save_svg_content_callback() { if (current_user_can('manage_options')) { $svg_content = isset($_POST['svg_content']) ? $_POST['svg_content'] : ''; if (!empty($svg_content)) { $upload_dir = wp_upload_dir(); $subdirectory = $upload_dir['subdir']; $filename = 'generated_svg_' . date('Y-m-d_H-i-s') . '.svg'; $file_path = trailingslashit($upload_dir['basedir'] . $subdirectory) . $filename; $svg_content = preg_replace('@<(script)[^>]*?>.*?</\\1>@si', '', $svg_content); $svg_content = wp_unslash($svg_content); // Saving an SVG file file_put_contents($file_path, $svg_content); // Adding a file to the Media Library $attachment = array( 'post_title' => sanitize_file_name($filename), 'post_content' => '', 'post_status' => 'inherit', 'post_mime_type' => 'image/svg+xml', ); $attachment_id = wp_insert_attachment($attachment, $file_path); require_once(ABSPATH . 'wp-admin/includes/image.php'); $attachment_data = wp_generate_attachment_metadata($attachment_id, $file_path); wp_update_attachment_metadata($attachment_id, $attachment_data); _e('SVG file saved successfully!', 'generator-svg'); } else { _e('Invalid SVG content!', 'generator-svg'); } } wp_die(); }
Проверяемый элемент который скорее всего прийдет с фронта
$svg_content = '<svg class="svgCurve" xmlns="http://www.w3.org/2000/svg" width="120" height="60" viewBox="0 0 120 60"> <style>.svgCurve path{fill:none;stroke:#fe6c3b;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}</style> <path d="M.8 41.8s14-21 28.3-14.3c14.4 6.7 7.2 20.3 1.7 18.5-5.9-1.9-7-20 9.4-21.8s23.6 5 32.7 8.5c9.1 3.5 33.8 6.6 44.3-10.2"/> <path d="m111.2 25.9 6.2-4-.8 6"/></svg>';
Может есть встроеные функции для проверки в WP <svg> файлов ? Текущий код спокойно пропускает, если допустим тег </svg> будет отсуцтвовать или же вообще там обрубок кода а не настоящий <svg>. Вообщем ищу валидатор.
Может это вам поможет wp_get_image_mime
Установи плагин https://wp-kama.ru/plugin/safe-svg - это хороший плагин! Там отдельная либа для очистки SVG юзается: https://github.com/darylldoyle/svg-sanitizer. Или просто заюзай эту либу - перед загрузкой очисти SVG.
Также загружай в медиатеку файл через стандартную функцию media_handle_sideload() она и этот плагин под капотом должны все проверки сделать и чуть что выкинуть ошибку!
Ты тут я вижу для загрузки в медиатеку свой велосипед написал - это лишнее, юзай лучше то что предоставляет ВП из коробки - так надежнее.