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

时间:2016-05-18 10:38:33

标签: php html security code-injection

我正在开发一个门户网站,要求用户上传将在某些HTML网页中显示的图片。这里的好习惯应该是什么?

  1. 我应该避免上传并要求用户为图片提供自己的网址吗?

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

  3. 因为我们知道,如果一个图像包含代码注入,那么它可能是一个致命的图像,但是远程图像是安全的吗?

    由于

3 个答案:

答案 0 :(得分:2)

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

另一方面,如果您的大多数目标受众是互联网用户,则可能无需提供上传选项。但正如我所说,上传对用户来说更自然,更容易。它还取决于图像的类型,如果图像是用户的头像,那么上传将适合,如果用户正在向您的网站添加图像以仅共享他们从其他网站找到的图像,那么远程网址将更合适

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

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

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

  2. 确认它是有效的图片文件(使用php getimagesize)

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

  4. 您要存储的文件夹必须使用.htaccess(SetHandler default-handler)

  5. 禁用所有类型的代码执行

答案 1 :(得分:1)

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

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

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

此处还有其他问题也可以回答你的问题,你只需要看看。

Validate image file php

答案 2 :(得分:1)

除了Ghulam Ali的建议:

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

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

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