猿问

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

我有以下 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 原始图像。


如何做到这一点?


守候你守候我
浏览 183回答 2
2回答

慕仙森

ImageMagickconvert -strip <in> <out>会做到这一点。它还会删除其他无关数据(EXIF、嵌入的缩略图等),因此请确保该行为是您想要的。$ xxd img.jpg | tail -n 300000280: 647f ffd9 3c73 6372 6970 743e 616c 6572  d...<script>aler00000290: 7428 2768 656c 6c6f 2729 3b3c 2f73 6372  t('hello');</scr000002a0: 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  ...............G00000280: ffd9无论如何,如果您不尝试执行图像,则不会发生任何事情。但如果不出意外的话,这就是浪费了图像文件中的空间。

青春有我

是的,在这个世界上,“用图片进行黑客攻击”(通常称为 Stegosploits)很流行。这里的行业方法是使用内容解除和重建(CDR)软件。引用维基百科:[CDR] 是一种计算机安全技术,用于从文件中删除潜在的恶意代码。与恶意软件分析不同,CDR 技术不会确定或检测恶意软件的功能,而是删除系统定义和策略中未批准的所有文件组件。如果这对您来说是关键任务,您可能需要研究一些可用的商业解决方案(本文还列出了其中的一些解决方案,我无法在这里给出建议)。对于本土解决方案,重新编码图像可能就足够了。
随时随地看视频慕课网APP

相关分类

Go
我要回答