为了账号安全,请及时绑定邮箱和手机立即绑定

检测base64 dataURL图像中的恶意代码或文本

检测base64 dataURL图像中的恶意代码或文本

Go
守候你守候我 2023-07-10 16:37:30
我有以下 3 个“dataURL 图像”,如果您通过“URL”打开它们,它们都会返回相同的图像,但下面的两个 dataURL 代码最后嵌入了“PHP 代码”和“JavaScript 代码”。如何从我的 base64 dataURL 图像中删除来自我不信任的用户的恶意代码。base64 dataURL 图像(安全):data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAA2AFwDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIBA//EACcQAAEDAwQBBAMBAAAAAAAAAAABAgMTUVIREhSRYQQjQWIxMkJy/8QAFwEBAQEBAAAAAAAAAAAAAAAAAAEHCP/EABgRAQEBAQEAAAAAAAAAAAAAAAABEUEx/9oADAMBAAIRAxEAPwCeNJZRxpLKRVddRVddTFeuvZ4pfTSYqpnHkwUlZHO/pTN7sl7IL48mCjjyYKRvdkvZqPci/lewOnGkso40llIquuoquuoF8aSymO9NIn8qpNV11MWRy/KgVx5MFC+nmX8b2/5doRvdkvY3uyXsDvugxUboMVI4z7DjPsXpPFufBi4nWDF3ZKwPT41FGTFxBWsGLuxrDg7smjJi4yjJgoHXdBio3QYqRxn2HGfYC90GKhzoMV7I4z7BfTPRP1UDdYMXdjWDF3ZNGTFwoyYuAVn5KKz8lOm6GyjdDZSnHKq9flTKzrqdVWFfhTPY+xFc6zrqKz8lOnsfYez9gJrPyUVn5KdN0NlG6Gygc6z8lMdM9U/ZTruhspirCuQHKs66is66nT2PsPY+wHOn5FPyACSMVuia6mABcgbtABkbT8in5ABkKfkxW6eQAZGAAGR//9k=base64 dataURL 2 图像(注入 PHP 代码):base64 dataURL 3 图像(注入 JavaScript 代码):您可以使用此类工具通过“在线解码”来查看文本代码 - https://www.base64decode.org/我允许用户将图像上传到我的服务器,并将图像“转换为”base64 dataURL 图像从上面的3个base64 dataURL图像中,您可以看到它们都返回相同的图像,但是由于图像内部嵌入了文本代码,因此它们的base64代码不同。我在后端使用 Go 来保存图像。我正在使用以下 HTML 代码将图像转换为 dataURL base64 文本。<input type='file' onchange="readURL(this);" /><img id="blah" src="#" alt="your image" /><script>function readURL(input) {  if (input.files && input.files[0]) {    var reader = new FileReader();    reader.onload = function (e) {      document.getElementById("blah").src = e.target.result;    };    reader.readAsDataURL(input.files[0]);  }}</script>我担心的是“文本”不应该出现在图像内部,不应该出现在那里。上面的 dataURL 返回相同的图像,但由于内部有额外的数据,它们具有不同的 base64 代码。我想从上面2个恶意代码中获取实际的图像base64代码。假设用户 B 上传了图像,我得到了“base64 dataURL 3”图像,但我想要用户上传的图像中的 base64 dataURL 原始图像。如何做到这一点?
查看完整描述

2 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

ImageMagickconvert -strip <in> <out>会做到这一点。它还会删除其他无关数据(EXIF、嵌入的缩略图等),因此请确保该行为是您想要的。


$ xxd img.jpg | tail -n 3

00000280: 647f ffd9 3c73 6372 6970 743e 616c 6572  d...<script>aler

00000290: 7428 2768 656c 6c6f 2729 3b3c 2f73 6372  t('hello');</scr

000002a0: 6970 743e 0a                             ipt>.


$ convert -strip img.jpg img2.jpg


$ xxd img2.jpg | tail -n 3       

00000260: 383a 2ebd 4c00 32c8 1ba4 0064 6d3f 229f  8:..L.2....dm?".

00000270: 9001 90a7 e4c8 a1d3 eff9 0019 1800 0647  ...............G

00000280: ffd9

无论如何,如果您不尝试执行图像,则不会发生任何事情。但如果不出意外的话,这就是浪费了图像文件中的空间。


查看完整回答
反对 回复 2023-07-10
?
青春有我

TA贡献1784条经验 获得超8个赞

是的,在这个世界上,“用图片进行黑客攻击”(通常称为 Stegosploits)很流行。这里的行业方法是使用内容解除和重建(CDR)软件。引用维基百科:

[CDR] 是一种计算机安全技术,用于从文件中删除潜在的恶意代码。与恶意软件分析不同,CDR 技术不会确定或检测恶意软件的功能,而是删除系统定义和策略中未批准的所有文件组件。

如果这对您来说是关键任务,您可能需要研究一些可用的商业解决方案(本文还列出了其中的一些解决方案,我无法在这里给出建议)。

对于本土解决方案,重新编码图像可能就足够了。

查看完整回答
反对 回复 2023-07-10
  • 2 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信