【发布时间】:2012-02-18 17:20:22
【问题描述】:
我一直在阅读有关 Flash Player 10 中文件上传的安全限制。根据FileReference docs for upload(),上传不必由用户启动的操作触发(browse() 可以,但仅此而已另一个故事)。如果是这样,这将导致多文件上传的用户体验尴尬,因为一次只能进行一次上传——因此用户必须在每个文件上单击(或按下按钮)一次才能启动上传,但只能当上一个文件完成上传时。
另一方面,documentation for URLLoader.load() 声明:
在 Flash Player 10 及更高版本中,如果您使用多部分 Content-Type(对于 包含上传的示例“multipart/form-data”)(由 POST 中“content-disposition”标头中的“filename”参数 body), POST 操作受应用到的安全规则的约束 上传:
必须执行 POST 操作以响应用户发起的 操作,例如鼠标点击或按键。
This Flash Security article 证实了 URLLoader 文档(请参阅“POST API”部分)。
然而,原始的whitepaper 并没有说明这一点——只是 FileReference browse 必须响应用户发起的操作,而不是(可能是 URLLoader 驱动的)上传本身:
当 SWF 文件使用 FileReference.browse() 和 FileReference.upload() 方法将文件上传到服务器,Flash 播放器执行两个安全规则:
- FileReference.browse() 必须从用户事件处理程序(鼠标或键盘事件)中调用。
[...]
Flash Player 在任何时候都会强制执行这些相同的规则 调用网络 API 以执行向服务器显示的 POST 包含上传。
据我所知,从实际使用 URLLoader API 来上传文件,上传确实不需要来自用户启动的操作;但是,这是因为我使用的是播放器的调试版本,还是因为文档有误? (或者别的什么?)
TL;DR: 文档包含相互矛盾的信息,我不相信我的现场测试(面对说它们不应该工作的文档)。 可以使用 URLLoader 上传文件而无需用户交互吗? 还是仅使用 FileReference? (这会扼杀大多数文件预处理的可能性,而这正是我感兴趣的事情!)
【问题讨论】:
标签: flash security file-upload