我已经实现了appengine 文档中提到的通用 blob 服务处理程序。只要您知道该 blob 的密钥字符串,该处理程序就会为您提供任何 blob。我使用它来轻松编写客户端可以用来下载文件的 URL。如果客户端 A 检查 URL 以下载他们的文件并找到他们的 blob 密钥(即1CX2kh468IDYKGcDUiq5c69u8BRXBtKBYcIaJkmSbSa4QY096gGVaYCZJjGZUpDz == str(BlobKey)
),他们能否以某种方式对该密钥进行逆向工程并轻松构建另一个可用于下载客户端 B 文件的密钥?或者密钥是否添加了随机组件?
作为参考,有这个关于的注释str(db.Key)
,这引起了我的问题:
注意:密钥的字符串表示看起来很神秘,但没有加密!它可以转换回原始密钥数据,包括种类和标识符。如果您不想将这些数据暴露给您的用户(并让他们轻松猜测其他实体的密钥),请加密这些字符串或使用其他东西。
我正在创建这样的文件,它没有指定filename
参数,所以我认为问题归结为,当没有指定一个时如何create()
“选择”一个?filename
我想我可以生成一个随机文件名并将其传递到这里,以确保这是安全的。
file_name = files.blobstore.create(mime_type='application/octet-stream')