Понимание модели безопасности Flash Player 10 для загрузки файлов - PullRequest
10 голосов
/ 18 февраля 2012

Я читал об ограничениях безопасности для загрузки файлов в Flash Player 10. Согласно документам FileReference для upload () , загрузка не должна инициироваться действием, инициированным пользователем. (browse () делает, но это другая история). Если это произойдет, это приведет к неудобному взаимодействию с пользователем при загрузке нескольких файлов, поскольку за один раз может произойти только одна загрузка - поэтому пользователю придется нажимать (или нажимать кнопку) один раз на файл, чтобы начать загрузку, но только когда предыдущий файл завершил загрузку.

Документация для URLLoader.load () , с другой стороны, гласит:

В Flash Player 10 и более поздних версиях, если вы используете составной Content-Type (для пример "multipart / form-data"), который содержит загрузку (обозначенную Параметр «filename» в заголовке «content-disposition» внутри POST тело), ​​операция POST подчиняется правилам безопасности, применяемым к добавления:

Операция POST должна выполняться в ответ на инициированную пользователем действие, такое как щелчок мыши или нажатие клавиши.

Эта статья о безопасности Flash подтверждает документацию URLLoader (см. Раздел «API POST»).

Оригинальная техническая документация , однако, не утверждает этого - только то, что FileReference browse должен быть в ответ на действие, инициированное пользователем, а не (возможно, управляемое URLLoader ) загрузить себя:

Когда SWF-файл использует FileReference.browse () и FileReference.upload () методы для загрузки файла на сервер, Flash Игрок применяет два правила безопасности:

  • FileReference.browse () должен вызываться из обработчика пользовательских событий (события мыши или клавиатуры).

[...]

Flash Player применяет эти же правила в любое время Сетевой API вызывается для выполнения POST, который появляется на сервере содержать загрузку .

Насколько я могу судить по фактическому использованию URLLoader API для загрузки файла, загрузка действительно не должна происходить из действия, инициированного пользователем; но это потому, что я использую отладочную версию плеера или из-за неправильной документации? (Или что-то еще?)

TL; DR: Документация содержит противоречивую информацию, и я не доверяю своим полевым испытаниям (несмотря на то, что документы говорят, что они не должны работать). Можно ли использовать URLLoader для загрузки файла без взаимодействия с пользователем? Или только FileReference? (Это убило бы большинство возможностей предварительной обработки файлов, и это то, чем я заинтересован!)

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

У вас нет ошибок, потому что вы работаете в режиме отладки.У меня возникла та же проблема при работе над моим проектом по тестированию скорости.
Так что по вопросам:

  • FileReference не может загружать файлы без участия пользователя.

  • URLLoader не может загружать файлы без участия пользователя, если вы используете свойства POST, multipart/form-data и filename.

  • Вы можете загружать файлы с помощью URLLoader, если вывы используете тип контента типа application/octet-stream и помещаете тело файла, закодированное (например, в base64) в ваш пост-запрос.Это означает, что если вы используете PHP, то вы будете работать не с $_FILES, а с массивом $_POST, чтобы получить ваш файл.

  • Работа в режиме отладки налокальный компьютер, не вызовет ошибку ограничения URLLoader.

2 голосов
/ 23 февраля 2012

Я считаю, что Adobe хочет иметь его, чтобы вы НЕ могли использовать URLLoader для загрузки файла без взаимодействия. Я просто думаю, что они оказались не лучшим образом, и вы можете обойти это в зависимости от того, как именно вы используете URLLoader для загрузки файла (если вы поместите имя файла в POST для URLLoader, то это должно привести к ошибке но вы можете обойти это, кодируя файл Base64 и отправляя его с помощью URLLoader на php).

Взгляните на этот пост . Прочитайте комментарии там, они, кажется, решают проблему. Надеюсь, это немного поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...