当前位置: 首页 > 知识库问答 >
问题:

从mime字节验证base64编码的图像

夏景胜
2023-03-14

我试图从mime类型字节验证一些Base64编码的图像,除了。png文件之外,它们都验证正确

png字节签名是89 50 4E 47 0D 0A 1A 0A

我有一个允许的字节签名数组

    'imageBytes'    => [
        "jpeg"  => "FFD8",
        "png"   => "89504E470D0A1A0A",
        "gif"   => "474946",
        "bmp"   => "424D"
    ],
    public function checkImageMimeBytes(string $imageData, array $imgByteArray) : string
        {
            if (!is_array($imgByteArray) || is_null($imgByteArray) || empty($imgByteArray)) {
                throw new \LogicException('undefined image security config');
            }

            foreach ($imgByteArray as $mime => $hexBytes) {
                $bytes = $this->getBytesFromHexString($hexBytes);
                if (substr($imageData, 0, strlen($bytes)) == $bytes) {
                    return $mime;
                } else {
                    throw new SecurityException;
                }
            }
            throw new \LogicException('Invalid Mime Byte');
        }
        public function getBytesFromHexString(string $hexData) : string
        {

            for ($count = 0; $count < strlen($hexData); $count += 2) {
                $bytes[] = chr(hexdec(substr($hexData, $count, 2)));
            }

            if (!isset($bytes) || !is_array($bytes) || empty($bytes) || is_null($bytes)) {
                throw new \LogicException;
            }

            return implode($bytes);
        }

编辑:用FileReader()从javascript编码前端

     let reader = new FileReader()
     reader.readAsDataURL(file)
        reader.onloadend = (readEvent) => {
          this.$emit('imageUploadReady', readEvent.currentTarget.result)
        }

共有1个答案

宿景曜
2023-03-14

和您一样,我也有一个base64图像($imagebase64str)。

我需要得到这个图像的mime类型必须是有效的。

输入:$imagebase64str

function imgMime($imgBytes){
    if(is_null($imgBytes)){
        return(false);
    }
    if(strlen($imgBytes)<12){
        return(false);
    }
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    $mime=$finfo->buffer($imgBytes);
    if(strncmp($mime, "image/", 6) != 0){
        return(false);
    }
    return($mime);
}

$imageBytes=base64_decode($imageBase64Str,true);
if(!$imageBytes){
    throw new Exception("cannot decode image base64");
}
$imageMime=imgMime($imageBytes);
if(!$imageMime){
    throw new Exception("cannot recognize image mime");
}
$allowedMimes=["image/jpeg","image/png","image/gif","image/bmp"];
if(!in_array($imageMime,$allowedMimes,true)){
    throw new Exception("image mime not allowed: ".$imageMime);
}
 类似资料:
  • 问题内容: 让我们说一个以Base64 String编码并提供给我的文件(例如myfile.jpeg)。我无法知道文件类型是什么。我想将字符串解码为文件(此示例中为图像)。我怎么知道文件的类型(例如jpeg)? 问题答案: 通常,基本的64位编码字符串可以绝对包含任何数据,因此无法知道其文件类型。 要确定它是否为JPEG图像的实例,您需要对其进行base64解码,然后执行诸如检查其幻数之类的操作,

  • 问题内容: 我正在为Firefox / IE构建一个开放式搜索附加组件,并且该图像需要经过Base64编码,因此如何对我拥有的收藏夹图标进行64位编码? 我只熟悉PHP 问题答案: 据我记得,图像数据有一个xml元素。您可以使用此网站对文件进行编码(使用上载字段)。然后,只需将数据复制并粘贴到XML元素即可。 您也可以这样使用PHP来做到这一点: 使用Mozilla指南获取有关创建OpenSear

  • 问题内容: 我已经通过AJAX向PHP发送了base64编码的字符串,并创建了一个图像资源-一切都很好。 现在,我想在调整图像大小后获得base64编码的字符串,但是我无法找到一个函数来获取base64encoded字符串。 问题答案: 取自http://www.php.net/manual/zh/book.image.php#93393

  • 它失败了并给出了像贝娄这样的例外。 xml格式与不兼容吗?

  • 以下是我的要求: 程序将有一个XML文件作为输入,带有3个标记:、和。所有这些数据都是Base64编码的。注意:程序正在使用BC JAR 下面是我试图解码证书的代码: 当我打印new String(certByteValue, Standard ardCharset.UTF_8)的值时,程序正在打印一些无法识别的文本。当执行代码的最后一行时,系统正在抛出 java.security.cert.证书

  • 问题内容: 在我的字节码检测项目中,我经常迷失在VerifyErrors上。但是,默认的Java Verifier很少提供有关导致错误的指令的信息(它仅提供方法和一条小消息)。是否有任何独立的字节码验证程序在定位错误(至少是精确的指令位置)方面提供了更高级的帮助?谢谢。 问题答案: 与任何涉及JVM字节码的项目一样,我将首先检查BCEL是否具有对您有用的任何东西。另外,也许FindBugs可能会有