米诺的后花园

测试一下WordPress后台SVG格式图片上传

🍃 提示:这是一篇写于 2.1 年前的文字,其中的部分观念或技术可能已随时间演变。

由于 SVG 是一种基于 XML 的矢量图形格式,容易被嵌入恶意脚本,因此官方默认关闭此功能。

试着用纯代码的方式来开启wordpress SVG格式图片上传功能。目前看使用Block编辑器图片能正常上传和显示。

只需将特定的过滤函数挂载到 WordPress 的 upload_mimes 上,即可解除文件类型限制。

// 允许上传,但可能会导致 WordPress 无法正确识别 MIME 类型,从而在媒体库中报错或无法显示图标。
function minuo_allow_additional_mime_types($mime_types) {
	if ( ! current_user_can( 'administrator' ) ) {
		return $mime_types;
	}
	$mime_types['svg'] = 'image/svg+xml';
	$mime_types['svgz'] = 'image/svg+xml';
	$mime_types['webp'] = 'image/webp';
	$mime_types['ico'] = 'image/vnd.microsoft.icon';
	return $mime_types;
}
add_filter('upload_mimes', 'minuo_allow_additional_mime_types');

// 确保系统对 SVG 文件类型进行正确验证
function minuo_wp_check_filetype_and_ext( $wp_check_filetype_and_ext, $file, $filename, $mimes, $real_mime ) {
	if ( ! $wp_check_filetype_and_ext['type'] ) {
		$check_filetype  = wp_check_filetype( $filename, $mimes );
		$ext = $check_filetype['ext'];
		$type = $check_filetype['type'];
		$proper_filename = $filename;
		if ( $type && 0 === strpos( $type, 'image/' ) && 'svg' !== $ext ) {
			$ext  = false;
			$type = false;
		}
		$wp_check_filetype_and_ext = compact( 'ext', 'type', 'proper_filename' );
	}
	return $wp_check_filetype_and_ext;
}
add_filter('wp_check_filetype_and_ext', 'minuo_wp_check_filetype_and_ext' , 10, 5);

《 “测试一下WordPress后台SVG格式图片上传” 》 有 11 条评论

  1. 夜未央说道:

    感谢你的代码,问题已经解决了。

    来自陕西·西安
  2. 万有引力说道:

    字也svg 是不是也是密码的一种了。我猜。

    来自山东·青岛
  3. 连SVG也要支持,难道是做设计的?

    来自江苏·南京
  4. 粽叶加米说道:

    不过svg有一定风险。

    来自广东·东莞
    • Minuo.St说道:

      svg可以包含有效的HTML,那么就存在注入攻击的风险。

      这里有一篇文章解释了这些风险:
      标题:SVG Security Risks – not just a scalable graphic
      链接:https://www.securesystems.de/blog/svg-security-risks-not-just-a-scalable-graphic/

      来自河南·洛阳

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理