将base64编码的用户数据放入img的src中是否安全?

bub*_*aba 6 php xss base64 filtering src

接受应该是base64 编码的图像数据并将其用作POST的属性是否安全?srcimg

<img src="data:image/png;base64,[data here]" />

显然,如果没有过滤,人们可以很容易地突破src属性和img标签并插入恶意<script />或其他标签,所以我的想法是

base64_decode($rawPostData)
Run Code Online (Sandbox Code Playgroud)

检查解码是否OK,然后

base64_encode($decodedData)
Run Code Online (Sandbox Code Playgroud)

将其放入src属性中。

这种方法是否存在任何漏洞(例如 XSS,也许是缓冲区溢出?)?

背景

我需要这个用于使用 JavaScript 将第三方转换svgcanvastobase64编码数据的页面(准确地说,使用“canvg”)。我需要将图像传递到服务器端脚本以使用该图像执行一些其他任务,还需要向用户/客户端显示图像。

dee*_*392 4

我会接受图像作为图像,然后就base64_encode这样了。它节省了您检查是否按预期提交的非常不必要的中间步骤,并且也使得不可能导致 XSS。

如果您必须像图像中那样验证 Base64,只需检查它仅包含 Base64 字符就足够了,因为您仅将其嵌入到 img 标签中(并且 Base64 中不允许使用标签破坏字符。

使用内置函数:

if (base64_decode($mystring, true)) {
    // is valid
} else {
    // not valid
}
Run Code Online (Sandbox Code Playgroud)