2012-02-18 15 views
10

che ho letto circa le limitazioni di sicurezza per il caricamento di file in Flash Player 10. Secondo il FileReference docs for upload(), il caricamento non ha bisogno di essere innescato da un'azione avviata dall'utente (il browse() lo fa, ma questa è un'altra storia). Se così fosse, sarebbe forzare un'esperienza utente imbarazzante per il caricamento multi-file, dal momento che solo uno di upload può verificarsi in una sola volta - in modo che l'utente avrebbe dovuto fare clic (o premere un pulsante) una volta per file per avviare l'upload, ma solo quando il file precedente ha terminato il caricamento.Comprendere il modello di sicurezza di Flash Player 10 per il caricamento di file

La documentation for URLLoader.load(), d'altra parte, afferma:

In Flash Player 10 e versioni successive, se si utilizza un Content-Type (ad esempio "multipart/form-data") che contiene un upload (indicato da un parametro "nome file" in un "content-disposition" nel corpo POST ), l'operazione POST è soggetto alle norme di sicurezza applicate a caricati:

deve essere eseguita l'operazione POST in risposta a un utente iniziato da azione, come ad esempio un clic del mouse o premere il tasto.

This Flash Security article corrobora la documentazione URLLoader (vedere la sezione "API POST").

L'originale whitepaper, tuttavia, non indica questo - soltanto che un FileReference browse deve essere in risposta ad un'azione avviata dall'utente, non il (potenzialmente URLLoader-guidato) carica stessa:

Quando un file SWF utilizza il metodo FileReference.browse() e FileReference.upload() per caricare un file su un server, Flash Player fa rispettare due regole di sicurezza:

  • FileReference.browse() deve essere chiamato da un gestore user-evento (mouse o eventi tastiera).

[...]

Flash Player applica queste stesse regole ogni volta che un API di rete è chiamata a svolgere un post che appare al server per contenere un upload.

Per quanto mi riguarda posso dire di effettivo utilizzo delle API URLLoader per caricare un file, gli arrivi infatti non bisogno di venire da un'azione avviata dall'utente; ma, è perché sto usando una versione di debug del player, o perché la documentazione è sbagliata? (O qualcos'altro?)

TL; DR: La documentazione contiene informazioni in conflitto, e non mi fido dei miei test sul campo (di fronte a documenti che dicono che non dovrebbero lavorare). Può URLLoader essere utilizzato per caricare un file senza l'interazione dell'utente? Oppure solo FileReference? (Questo ucciderebbe la maggior parte delle possibilità di pre-elaborazione dei file, che è ciò che mi interessa essere interessato a fare!)

risposta

2

Non hai errori, perché stai eseguendo il debug. Ho avuto lo stesso problema mentre lavoravo al mio progetto speedtest.
Così, per le domande:

  • FileReference non possono caricare file senza l'interazione dell'utente.

  • URLLoader non possono caricare file senza interazione da parte dell'utente se si utilizza POST, multipart/form-data e filename proprietà.

  • È possibile caricare file con URLLoader se si utilizza tipo di contenuto come application/octet-stream e mettendo il corpo file codificato (per esempio in Base64) in voi Inserisci richiesta. Ciò significa che se stai utilizzando PHP, non lavorerai con lo $_FILES, ma con l'array $_POST, per ottenere il tuo file.

  • L'utilizzo della modalità di debug sulla macchina locale non attiverà l'errore di limitazione URLLoader.

+0

Ah, è a causa del lettore Debug! Ma, per quanto ne so, FileReference * può * caricare file senza interazione dell'utente (semplicemente non può * navigare * per loro). Odio i doppi standard. – Cameron

+1

Come hai postato nella tua domanda, e secondo adobe.com, 'FileReference.browse()' deve essere chiamato prima di 'FileReference.Upload()'. – Den

+0

Sì, capisco :-) Ma immagina che l'utente faccia clic su un pulsante "sfoglia" e selezioni 17 file attraverso un 'FileReferenceList'. Questi 17 file possono quindi essere caricati senza ulteriore interazione dell'utente. Ma, se vogliamo modificarli in qualche modo prima di caricarli (ad esempio, ridimensionando i file di immagine sul client), l'utente dovrebbe fare clic su altre 17 volte, una volta per avviare ciascun caricamento (URLLoader). Questo è ciò che intendevo per doppio standard. Naturalmente, nessuno * in realtà * costringerà i propri utenti a fare clic su 17 volte quando esistono soluzioni alternative accettabili (come la codifica Base64). – Cameron

2

Credo che Adobe voglia averlo in modo che NON si possa usare URLLoader per caricare un file senza interazione. Penso solo che non è successo nel modo migliore e puoi aggirarlo a seconda di come usi esattamente l'URLLoader per caricare il file (se inserisci un nome file nel POST per l'URLLoader dovresti fare un errore, ma puoi aggirare il problema con Base64 codificando il file e inviandolo con URLLoader su php).

Dai uno sguardo allo this post. Leggi i commenti anche lì sembrano aver risolto il problema. Speriamo che questo aiuti un po '.

Problemi correlati