要求用户上传图片或使用远程图片

Asking user to upload images or using remote images

我正在开发一个门户,该门户要求用户上传将在特定 HTML 页面中显示的图像。这里的好做法应该是什么?

  1. 我是否应该避免上传并要求用户为图片提供自己的 URL?

  2. 要求用户上传图像文件。

众所周知,如果包含代码注入,图像可能是致命的,但是远程图像呢,它们安全吗?

谢谢

嗯,这取决于项目的性质。

事实上任何方法都可以,但您应该验证和过滤用户输入。

有很多选项可用于验证文件是否为图像。 php 中的 getimagesize() 函数可以作为示例提及,因为每个图像文件都必须具有分辨率和其他相关数据。

这里还有其他关于 SO 的问题也回答了你的问题,你只需要看一下。

Validate image file php

这取决于您网站的一致性。上传比输入 URL 要好得多,例如,如果目标受众是专业客户,他们更喜欢上传,因为很难向他们解释什么是远程 url 以及如何获得它。但是上传是比较传统的方式,感觉比较轻松。

另一方面,如果您的大部分目标受众是互联网用户,则可能无需提供上传选项。但正如我所说,上传对用户来说感觉更自然、更容易。这也取决于图像的类型,如果图像是用户的头像那么上传就合适,如果用户将图像添加到您的网站只是为了分享他们从其他网站找到的图像那么远程 url 会更合适.

上传和获取远程文件到您的服务器可能是致命的,但如果您使用远程文件只是为了将 url 存储在您的数据库中,那么它不会产生安全问题。

因此,如果您想要上传功能或将远程图像存储到您的服务器,您必须执行一些特定步骤以确保您的服务器的安全:

  1. 验证文件扩展名和 mime 是否为有效图像。 (不要只依赖于此。)

  2. 验证它是一个有效的图像文件(使用 php getimagesize)

  3. 调整图像大小并将图像复制到新的图像对象中。并将该图像存储到您的服务器中。

  4. 你要存放的文件夹必须使用.htaccess (SetHandler default-handler)禁用各种代码执行

除了 Ghulam Ali 的建议:

确保清理文件名。最好是为用户上传的媒体生成新的文件名。

上传目录只有可写的用户权限,但这可能会导致一些复杂情况。

除了解决安全问题外,您还需要考虑其他重要事项,例如方向,因为从移动设备获取的媒体可能具有随机方向。