base64图片在传给后端后,被过滤掉特殊字符,导致图片校验失败

1,692 阅读2分钟

最近在项目中遇到一个奇怪的问题,前端生成的base64图片(imagebase64)和一同生成的imageToken传给后端之后,在进行校验的时候,发现不匹配,导致校验失败。为什么会有这个问题呢?

我先说一下项目背景,这个项目是做线上电子签约的,主要是通过活体检测进行人脸识别,然后在线签约。

在进行活体检测的时候,拿到人脸照片,去公安数据库中进行比对,然后进行在线签约。

在进行人脸识别的时候,活体检测SDK会生成base64图片和imageToken传给后端,后端传给提供SDK的检测机构进行验证,图片是否匹配,然后再把图片传给公安部门进行比对校验,进行身份识别。

问题就出在了检测机构进行验证时,图片一直不匹配。

前后端一块进行了排查,因为图片展示问题,所以前端传给后端之前,会把imagebase64中的+/这两个特殊符号转为%2B、%2F,然后再传给后端,之前因为是因为特殊符号转化问题,然后前后端进行了比对,结果发现不是。

然后的话,我直接去拿SDK生成的imagebase64和imageToken,和后端接收到的值进行比对(当然这笔数据是校验失败的数据),果然发现了不一样,imagebase64发生了变化,原来是前端SDK生成的imagebase64含有FoNt等字符,然后后端接收的时候把FoNt这些作为特殊字符给过滤掉了,于是就造成了imagebase64和imageToken不一致,导致图片校验不通过。

记录一下问题和排查的过程。