2016-05-18 42 views
1

我正在研究一个门户网站,要求用户上传将显示在特定HTML页面中的图像。这里应该有什么好的做法?要求用户上传图像或使用远程图像

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

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

既然我们知道,如果图像包含代码注入,它可能是一个致命的图像,但是对于远程图像,它们是安全的吗?

谢谢

+1

远程图像意味着无论生活在远程资源的图像都可以随时更改,完全不受您的控制。例如用户粘贴到一个米老鼠的图片链接,你赞成,然后用户更改远程图像是硬核色情。 “哎呀呀”。 –

回答

2

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

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

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

所以,如果你想上传功能或者存储在远程图像到您的服务器,你必须做一些特定的步骤,以确保您的服务器的安全性:

  1. 验证文件扩展名和MIME是有效的图像。 (不要只在这个依靠。)

  2. 验证这是一个有效的图像文件(使用PHP和getimagesize)

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

  4. 要存储的文件夹必须通过使用禁用各种代码执行。htaccess的(SetHandler默认处理程序)

1

那么,这取决于项目的性质。

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

如果文件是图像,有很多选项可用于验证文件。 从php的getimagesize()功能可以作为一个例子,因为每个图像文件必须有一个分辨率和其他相关数据。

还有其他的问题在这里也回答你的问题,你只需要看看。

Validate image file php

1

除了吴拉姆·阿里的建议:

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

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

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