WordPress как на ладони
rgbcode is looking for WordPress developers. eurobyte.ru - мощные сервера с Дата-центрами в Нидерландах и Москве. От 159 ₽/мес.

Как проверить что получаемый код 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>. Вообщем ищу валидатор.

Заметки к вопросу:
mi13 8 месяцев назад

Может это вам поможет wp_get_image_mime

1
BlackStar1991
8 месяцев назад 9
  • 1
    Kama9752

    Установи плагин https://wp-kama.ru/plugin/safe-svg - это хороший плагин! Там отдельная либа для очистки SVG юзается: https://github.com/darylldoyle/svg-sanitizer. Или просто заюзай эту либу - перед загрузкой очисти SVG.

    Также загружай в медиатеку файл через стандартную функцию media_handle_sideload() она и этот плагин под капотом должны все проверки сделать и чуть что выкинуть ошибку!

    Ты тут я вижу для загрузки в медиатеку свой велосипед написал - это лишнее, юзай лучше то что предоставляет ВП из коробки - так надежнее.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация