You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PHP中如何校验base64格式图片的合法性?

判断Base64格式图片合法性的方案

1 前置格式校验

首先匹配Base64图片的标准URI前缀,合法的Base64图片必须以data:image/[格式];base64,开头,其中[格式]为jpeg、png、gif、webp等常见图片类型,不符合该规则可直接判定为不合法。
其次校验前缀后的Base64编码内容:仅允许出现大小写英文字母、数字、+、/四类字符,末尾最多允许2个=作为填充符,且内容总长度必须是4的倍数,不符合则为非法Base64内容。

2 核心内容校验

前置校验仅能过滤格式明显错误的内容,无法判断编码内容是否为真实图片,必须对解码后的二进制内容做校验,不同语言的实现思路一致:

  • PHP 可直接调用getimagesizefromstring()函数读取解码后的二进制内容,能正常返回图片宽高、类型等信息即为合法图片
  • Python 可使用PIL库的Image.open()加载解码后的二进制流,无报错即为合法图片
  • 前端JS 可创建Image实例,将Base64地址赋值给src属性,监听onload事件触发即为合法,onerror触发即为非法

对应需求的PHP实现代码

$pic = 'data:image/jpeg;base64,/9j/4AAQSkZJ....';
// 校验标准Base64图片前缀
if (!preg_match('/^data:image\/(jpeg|png|gif|webp);base64,/i', $pic)) {
    echo "Not base64 image";
    exit;
}
// 提取纯Base64编码内容
$pureBase64 = substr($pic, strpos($pic, ',') + 1);
// 校验Base64字符规则
if (!preg_match('/^[A-Za-z0-9+\/]+={0,2}$/', $pureBase64) || strlen($pureBase64) % 4 !== 0) {
    echo "Not base64 image";
    exit;
}
// 解码后校验是否为有效图片
$imageBinary = base64_decode($pureBase64);
$imageInfo = getimagesizefromstring($imageBinary);
if ($imageInfo) {
    echo "{$pic} is base64 image";
} else {
    echo "Not base64 image";
}

注意事项

  • 仅做格式匹配校验极易被伪造内容绕过,必须增加解码后的内容校验才能保证结果准确
  • 可根据业务需求增加Base64长度限制,避免恶意构造的超大内容占用过多服务器资源

内容的提问来源于stack exchange,提问作者Hazem El-behairy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:06:03