gpt4 book ai didi

php - 安全地提供图像

转载 作者:行者123 更新时间:2023-12-03 01:02:58 26 4
gpt4 key购买 nike

一位受人尊敬的同事坚持认为,在我的服务器上存储图像是不安全的,特别是如果文件结构很容易猜测(因为我们有用户创建的图像库,命名方案很容易遵循)。

相反,他建议将图像存储在根目录之上,并使用 fread 或 fputthrough 提供它们。

我无法弄清楚风险是什么,或者为什么通过脚本提供服务时可以避免这些风险。
这样一个脚本的开销听起来很荒谬。

我确实知道图像在存储到服务器上之前必须进行检查,为此我使用 imagemagick 进行较小的转换并保存到 jpeg - 据我猜测,这应该消除任何糟粕。

所以,向伟大的思想家提出的问题是:

  1. 通过易于遵循的路径在本地存储图像是否存在安全问题?
  2. 我使用 IM 审核图像的方法安全吗?
  3. 有理由使用 PHP 来提供图像吗?
  4. 使用 PHP 的开销真的很大吗?
  5. 使用 CDN 会对安全性产生影响吗(我不想)?
  6. 我错过了什么吗?

谢谢大家!

最佳答案

我怀疑您的 friend 所指的不仅仅是提供图像,而是专门提供用户提供的图像。提供用户提供的内容存在许多安全问题。对于图像,有多种方法可以使用图像上传来让 Web 服务器执行代码。一些较知名的包括:

  • “GIFAR”文件。本质上,这是一个 GIF 文件和一个 jar 文件的串联。由于 GIF 的索引信息位于开头,而 jar 文件的索引信息位于末尾,因此可以组合这两种文件类型,结果既是有效的 GIF 又是有效的 JAR。
  • 多个文件扩展名。 Web 服务器支持多种文件扩展名,以实现国际化等功能。例如,名为 page.html.fr 的文件可能映射到页面的法语版本。扩展名为 image.php.jpg 甚至 image.php.123 的文件可能可以作为 PHP 脚本执行,具体取决于服务器的配置。
  • 缓冲区溢出。图像文件格式通常在开头包含一个 header ,描述文件的大小和格式。低估大小可能会允许恶意用户发起缓冲区溢出攻击。

所有这些示例都导致了作为 Web 服务器执行代码的能力。尽管该站点的功能需要上传文件的能力,但将它们存储在无法通过 URL 直接访问的目录中会使利用它们变得更加困难。同样,使用脚本而不是 Web 服务器的 MIME 处理程序来为它们提供服务,可以确保将图像视为数据流而不是潜在的可执行文件。

如此多的安全性是否荒谬取决于用户的数量、收集的有关用户的数据的性质以及网站的琐碎程度。至少,攻击者希望获取用户的密码,因为倾向于同步用户的密码。您网站上密码为 ABC123 的用户可能会在电子邮件、社交网站以及可能的银行和金融网站上使用相同的密码。除了密码之外,如果您收集的有关用户的数据是个人身份数据或具有其他市场值(value),或者如果您只是拥有大量用户,那么您必须假设该网站将成为目标。这意味着,要么更加小心地提供用户提供的图像文件,要么很好地验证它们,要么两者兼而有之。

对于使用 imagemagick 是否能解决安全问题,我没有一个好的答案。至少,请确保使用当前版本,因为快速搜索会发现许多已知漏洞。请记住,您需要担心的文件可能会炸毁 imagemagick,即使它们没有利用已知漏洞之一,因此请务必具有良好的错误捕获功能。

关于php - 安全地提供图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4845612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com