Cam*_*ron 10 security flash file-upload
我一直在阅读有关Flash Player 10中文件上传的安全限制.根据FileReference docs for upload(),上传不必由用户启动的操作触发(browse()确实如此,但那是另一个故事).如果确实如此,这会对多文件上传造成尴尬的用户体验,因为一次只能进行一次上传 - 因此用户必须每个文件单击(或按一下按钮)一次才能启动上传,但仅限当上一个文件完成上传时.
另一方面,URLLoader.load()的文档指出:
在Flash Player 10及更高版本中,如果使用包含上载的多部分Content-Type(例如"multipart/form-data")(在POST正文中的"content-disposition"标题中用"filename"参数表示) ),POST操作受上传应用的安全规则的约束:
必须执行POST操作以响应用户启动的操作,例如鼠标单击或按键.
本Flash安全性文章证实了URLLoader文档(请参阅"POST API"部分).
然而,原始白皮书没有说明这一点 - 只有FileReference 浏览必须响应用户启动的操作,而不是(可能由URLLoader驱动)上传本身:
当SWF文件使用FileReference.browse()和FileReference.upload()方法将文件上载到服务器时,Flash Player会强制实施两个安全规则:
- 必须从用户事件处理程序(鼠标或键盘事件)中调用FileReference.browse().
[...]
每当调用网络API执行POST时,Flash Player都会执行这些相同的规则,该POST对服务器显示为包含上载.
据我所知,从实际使用URLLoader API上传文件,上传确实不需要来自用户发起的动作; 但是,这是因为我使用的是播放器的调试版本,还是因为文档错了?(或者是其他东西?)
TL; DR:文档包含有冲突的信息,我不相信我的现场测试(面对那些说它们不应该工作的文档).可以使用URLLoader上传文件而无需用户交互吗?还是只有FileReference?(这会杀死大多数文件预处理的可能性,这是我碰巧有兴趣做的!)
小智 2
您不会收到错误,因为您正在调试中运行。在进行我的速度测试项目时遇到了同样的问题。
所以对于问题:
FileReference在没有用户交互的情况下无法上传文件。
URLLoaderPOST如果您使用,multipart/form-data和属性,则无法在没有用户交互的情况下上传文件filename。
URLLoader如果您使用类似内容类型application/octet-stream并将文件正文编码(例如采用 base64)放入发布请求中,则可以上传文件。这意味着,如果您使用 PHP,那么您将不会使用$_FILES,而是使用$_POST数组来获取文件。
在本地计算机上以调试模式工作,不会触发URLLoader限制错误。
| 归档时间: |
|
| 查看次数: |
570 次 |
| 最近记录: |