【问题标题】:Asking user to upload images or using remote images要求用户上传图片或使用远程图片
【发布时间】:2016-05-18 10:38:33
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

  • 远程图像意味着远程资源中的任何图像都可以随时更改,完全不受您的控制。例如用户粘贴指向米老鼠图片的链接,您同意,然后用户将远程图像更改为硬核色情。 “哎呀”。

标签: php html security code-injection


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    Validate image file php

    【讨论】:

      【解决方案3】:

      除了古拉姆阿里的建议:

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-02-07
        • 2012-10-11
        • 2021-03-19
        • 1970-01-01
        • 1970-01-01
        • 2019-03-21
        • 1970-01-01
        • 2019-11-28
        • 1970-01-01
        相关资源
        最近更新 更多