1

我想让用户上传图片,我的计划是在他们的用户名之后命名图片文件以便于参考。但我突然想到,大多数允许上传图片的网站通常会生成一个随机的数字字符串作为文件名。这样做有什么(安全)优势吗?或者这只是开发商的一个不相关的决定?

对我来说,使用用户名的好处是我不需要为每个用户在数据库中存储一串数字,并且可以单独通过用户名引用图像。

4

3 回答 3

3

主要的安全问题是“信息泄露”。例如,如果您的用户可以选择不公开显示,那么猜测您的命名约定的攻击者可以检索“隐藏”用户的照片;这可能不是用户想要的。

使用数字文件名 - 从“1.jpg”开始并递增 - 会泄露其他信息;任何人都可以通过增量请求文件并查看他们何时收到 404 错误来了解您拥有多少用户。

从软件设计的角度来看,在许多情况下,您不希望将用户名用作主键 - 例如,用户名可能会更改(尤其是如果您使用电子邮件地址作为用户名)。您的数据库主键应该是一些不可变的、唯一的东西,例如 (G)(U)UID。这很可能是您在查看其他网站的用户照片时看到的文件名。

当然,如果您允许用户上传多张照片,则使用主键也不起作用-因此您必须在“约定”之间进行选择-例如,为每个用户设置一个照片文件夹,并通过某种方式找出该文件夹中有多少图像,或者通过将这些图像路径显式存储在数据库中。在这两种情况下,对用户使用主键可能是不够的......

于 2012-04-12T11:14:36.273 回答
1

我相信这主要是一个命名空间问题。

随机化 URL 的主机(我知道)允许在没有用户帐户的情况下上传 - 所以你的方法不起作用。使用随机文件夹/文件命名可以最大限度地减少人们两次上传相同文件名的冲突。

如果您永远不需要接受匿名上传,我会说这取决于您如何组织用户文件并避免命名空间冲突......

于 2012-04-12T10:58:46.907 回答
0

我会建议 - 去寻找给你独特性的东西。例如 - 如果我要上传我的个人资料图片,我可能会将其命名为,下次登录时,我希望我的照片从屏幕上看我,图片的名称与我作为用户me.jpg无关

所以如果你把它重命名为Pavel_Janicek_me.jpgordflw00axxwe.jpg真的没关系。只要你展示我自己的照片。

如果您允许用户上传多张图片,请考虑一些编号。重命名应该可以解决这些错误:

  • 两个不同的用户上传同名图片
  • 一位用户上传了两张同名的不同图片
于 2012-04-12T11:03:10.367 回答