我在验证文件上传时遇到问题。
为确保用户上传有效图片(不是扩展名为.jpg或.png的文件,...),可以使用getimagesize()
。例如:W3school。
但是.svg文件怎么样?当我使用getimagesize()
时,函数print_r()
不会返回任何内容。我怎么能确定用户上传.svg文件,而不是扩展名为.svg(virus.svg)的文件?
答案 0 :(得分:-1)
如果您可以使用外部脚本,则可以使用 SVG Sanitize 包:https://packagist.org/packages/enshrined/svg-sanitize
虽然其主要目的是卫生,但作为该过程的副产品,它还将确保您的 SVG 有效。
use enshrined\svgSanitize\Sanitizer;
// Create a new sanitizer instance
$sanitizer = new Sanitizer();
// Load the dirty svg (if it's an SVG file)
$dirtySVG = file_get_contents('filthy.svg');
// if it's a base64 encoded string, you can alternatively use the following
$base64_str = str_replace('data:image/svg+xml;base64,', '', $b64_string);
$base64_str = str_replace(' ', '+', $base64_str);
$dirtySVG = base64_decode($base64_str);
// Pass it to the sanitizer and get it back clean
if(!$cleanSVG = $sanitizer->sanitize($dirtySVG)){
//if this fails, the SVG was not valid.
}
// Now do what you want with your validated and clean SVG/XML data