Событие Browser, когда загруженный файл сохраняется на диск

У меня есть чувствительные файлы для загрузки на пользователей, и каждому пользователю разрешают загрузить данный файл точно однажды. Если загрузка перестала работать, я хочу разрешить перезагрузку, но не иначе.

Не достаточно полагаться на вход/обработку запроса загрузки файла в сервере - я должен знать детерминировано, когда файл завершен и на месте в клиенте, начиная со многих из моей пользовательской работы в среде с частыми отбрасываниями возможности соединения.

Самый простой путь к этому для работы состоял бы в том, если бы браузер выставил "файл, сохраненный" событие от Сохранения как... диалоговое окно, которое могло быть соединено проводом к функции JavaScript на странице загрузки (который мог отправить назад на сервер). Но, интуиция предполагает, что могли бы быть дыры в системе безопасности, если бы браузеры выставили эту функциональность, поскольку она крадется несколько вне песочницы. Я не уверен, что это даже возможно.

Я найденный несколько другое вопросы в этой области, но ничто об этой проблеме конкретно.

Какие-либо идеи?

Править: Я не должен был использовать слово "безопасность" в исходном вопросе, жаль об инициировании отвлекающих маневров.

Редактирование 2: Моя "безопасность", формулирующая введенных в заблуждение людей в offtopic технические проблемы безопасности, но вы оба подтвердили мое подозрение что "нет, нет никакой поддержки браузера для этого". Я отмечаю первого комментатора с ответом, так как его первое предложение имело то, что я искал. Спасибо все.

20
задан Brian Tompsett - 汤莱恩 9 May 2019 в 19:10
поделиться

2 ответа

В JavaScript нет такого события браузера, и даже если оно было, вы не можете доверять браузеру пользователя в обеспечении безопасности.

Лучше использовать GUID для создания уникального URL-адреса для каждой загрузки. Затем вы можете, например:

  • разрешить URL-адрес быть действительным только в течение определенного периода времени
  • разрешить передачу только с определенного IP-адреса, связанного с уникальным URL-адресом
  • позволить вашему коду на стороне сервера определять, когда контент для уникальный URL-адрес был полностью перенесен, а затем он стал недействительным.

Позвольте мне прояснить последний пункт. Допустим, вы используете Java - вы будете in.read (buffer) и out.write (buffer) в цикле до EOF. Если клиент отключается, вы получите исключение IOException во время out.write () и сможете отличить успешную загрузку от прерванной. На других платформах, я уверен, есть способы узнать, потеряна связь или нет.

РЕДАКТИРОВАТЬ: На самом деле вы можете запустить событие браузера, используя прием, описанный в принятом ответе на один из вопросов, которые вы связали с . Однако это не было бы надежным решением для ограничения количества загрузок.

9
ответ дан 30 November 2019 в 00:35
поделиться

Почему важно, чтобы файл мог скачать "ровно один раз"? После загрузки файл может быть скопирован, так что действительно ли существует проблема безопасности, позволяющая одному и тому же пользователю загружать файл более одного раза?

Если нет, не могли бы вы сделать что-то вроде этого:

  1. Создайте уникальный URL-адрес для загрузки заданного файла. (При необходимости используйте GUID для скрытия информации)
  2. Свяжите этот URL-адрес с ИНФОРМАЦИЕЙ ПОЛЬЗОВАТЕЛЯ (тип браузера, IP-адрес и т. Д.) И ОКНО ВРЕМЕНИ. Разрешить загрузки только от этого пользователя и во время окна.
  3. Окно должно быть достаточно длинным, чтобы пользователь мог заметить, что передача не удалась, и повторить попытку один или два раза, но не дольше.

Конечный результат:

  1. Вы можете быть уверены, что файл загружает только предполагаемый получатель.
  2. Вы можете быть уверены, что получатель сможет загрузить файл только во время короткого окна.
  3. Один и тот же пользователь может загрузить файл более одного раза, но кого это волнует? Это ничем не отличается от создания локальной копии первого файла.

Если вас это действительно беспокоит, регистрируйте каждый запрос на загрузку и запускайте запланированный отчет для файлов, которые были загружены более одного раза. Если что-то выглядит подозрительно, вы можете изучить журналы безопасности, поговорить с пользователем и т. Д.

2
ответ дан 30 November 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: