在需要身份验证/授权的CakePHP3应用程序中,我有可能上传图像。
现在我想避免用户能够通过例如方式查看其他用户的图像。猜测图像名称等。
另外,我想使用实体的ID作为文件名,这样也很容易猜到。
那么如何实现资产授权呢?
答案 0 :(得分:1)
我会阻止“猜测”文件名只是通过生成一个随机的长度不足的字符串字符串作为新文件名,就像Facebook上传照片一样:
因为我们不应该对文件的原始名称感到烦恼,所以我们可以重命名用户上传的文件。例如,用户24976上传名为tomato12.png
的文件。然后,上载脚本将文件重命名为(例如)以下名称:
1481540475_24976_iDewM51NYrBYgnIh.png
它由四部分组成:
[timestamp]_[userId]_[randomString].[suffix]
然后,将文件名保存到数据库中。如果您查看uploads目录,您可以看到哪个用户上传了哪个文件,但是没有权限查看目录索引的局外人永远无法猜出文件的名称。无需身份验证。