我怀疑您的朋友所指的不仅仅是提供图像,而是专门提供用户提供的图像。在提供用户提供的内容时存在许多安全问题。对于图像,有多种方法可以使用图像上传来让 Web 服务器执行代码。一些比较知名的包括:
- 一个“GIFAR”文件。本质上,这是一个 GIF 文件和一个 jar 文件连接在一起。因为 GIF 的索引信息在开头,而 jar 文件的索引信息在结尾,所以这两种文件类型可以组合起来,结果既是有效的 GIF,又是有效的 JAR。
- 多个文件扩展名。Web 服务器支持多个文件扩展名以允许国际化之类的事情。例如,名为 page.html.fr 的文件可能映射到页面的法语版本。扩展名为 image.php.jpg 或什至 image.php.123 的文件可以作为 PHP 脚本执行,具体取决于服务器的配置。
- 缓冲区溢出。图像文件格式通常在开头包含一个标题,用于描述文件的大小和格式。低估大小可以让恶意用户制造缓冲区溢出攻击。
所有这些示例都导致了将代码作为 Web 服务器执行的能力。尽管该站点的功能需要能够上传文件,但将它们存储在 URL 无法直接访问的目录中会使利用它们变得更加困难。同样,使用脚本而不是 Web 服务器的 MIME 处理程序来为它们提供服务可确保将图像视为数据流而不是潜在的可执行文件。
如此多的安全性是否荒谬取决于用户的数量、收集的有关他们的数据的性质以及网站的琐碎性。至少,攻击者希望获取用户的密码,因为他们倾向于同步它们。您网站上密码为 ABC123 的用户可能会对电子邮件、社交网站以及可能的银行和金融网站使用相同的密码。除了密码之外,如果您收集的有关用户的数据可以识别个人身份或具有其他市场价值,或者您只是拥有大量用户,那么您必须假设该网站将成为目标。这意味着,要么更加小心地提供用户提供的图像文件,要么非常好地验证它们,或者两者兼而有之。
对于使用 imagemagick 是否会解决安全问题,我没有很好的答案。至少,一定要使用当前版本,因为快速搜索会发现许多已知漏洞。请记住,您需要担心的文件可能会破坏 imagemagick,即使它们没有利用已知漏洞之一,因此请确保具有非常好的错误捕获。