元杂草中SVG的逃逸和消毒

时间:2017-02-20 作者:Chet Hardin

我想在metabox文本区域中包含内联SVG。

这很简单。最要命的是,在保存Posteta之前,我如何对textarea进行消毒,以及如何逃离它?

哈尔普?

谢谢

2 个回复
SO网友:Marc

下面是一个PHP库,它是为清理SVG文件而创建的,可能值得一看。https://github.com/darylldoyle/svg-sanitizer

下面是一个如何使用的示例:

// Now do what you want with your clean SVG/XML data

function your_save_meta( $post_id, $post, $update ) {

    // - Update the post\'s metadata.

    if ( isset( $_POST[\'svg_meta\'] ) ) {

        // Load the sanitizer. (This path will need to be updated)
        use enshrined\\svgSanitize\\Sanitizer;

        // Create a new sanitizer instance
        $sanitizer = new Sanitizer();

        // Pass your meta data to the sanitizer and get it back clean
        $cleanSVG = $sanitizer->sanitize($_POST[\'svg_meta\']);

        // Update your post meta
        update_post_meta( $post_id, \'svg_meta_name\', $cleanSVG );

    }

}
add_action( \'save_post\', \'your_save_meta\', 10, 3 );

SO网友:Ian Dunn

安全SVG(mentioned by @Marc) 是迄今为止我见过的最好的WP插件。

但需要注意的是,很可能有办法绕过它。SVG设计不安全;我们都认为它们是图像,但实际上它们是小型XML应用程序。

DOMPurify 是我所知道的唯一可靠安全的解决方案。这是因为它在JavaScript中运行,所以它可以在引擎解析对象之后对其进行分析。PHP不可能做到这一点。您可以在#24251-core.

不过,对于大多数网站来说,安全的SVG可能是一个很好的折衷方案。但是,对于任务关键型/企业/电子商务站点,我建议通过DOMPurify运行它(尽管这并不容易)。

可能通过pre_move_uploaded_file 过滤器由提供_wp_handle_upload().$file 作为字符串,并向节点发出HTTPS请求。js API

相关推荐

如何实现我自己的图标而不是使用SVG图标系统

在WordPress 4.9.2中,我为2017年创建了一个儿童主题。我注意到它在页面底部带有自己的SVG图标系统,用于社交媒体图标。我看到一些代码是在site-info.php 文件,在wp_nav_menu().<nav class=\"social-navigation\" role=\"navigation\" aria-label=\"<?php esc_attr_e( \'Footer Social Links Menu\', \'twentyseventeen\' ); ?>