LINUX.ORG.RU

Браузеры и локальные файлы. #$%^&* CORS!

 


0

2

Есть плейер на js для воспроизведения записи видеоконференции (bigbluebutton)

Сама запись представляет собой главный xml файл, несколько вспомогательных xml файлов, набор картинок презентаций и сами видеозависи.

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

Сейчас запись можно посмотреть только с сервера.

Если все файлы скопировать в подкаталог и в браузере открыть сам плеер (file:///srv/www/tmp/bbb/player.html), то он не работает, а в консоле на все xml файлы рурается:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at file:///srv/www/tmp/bbb/presentation/d93d9879ce0b3d67c020ce21b15ba38b3a47b221-1599558313776/metadata.xml. (Reason: CORS request not http).

Вызывает недоумение запрет на доступ к локальным данным, если исходный файл так же локальный! Обращения к сетевым ресурсам при этом отсутствуют. Все требующиеся для работы файлы - локальные.

Да, для FF есть костыль в виде «privacy.file_unique_origin», но это 3.14ц.

Вопрос: можно ли как-нибудь переписать этот плеер так, чтоб он воспроизводил локальные файлы без шаманских действий с настройкой браузера (FF и chrome)? Если да, то в какую сторону копать?

Я не веб-разработчик. Мне нужно понять реализуемо это или нет.

★★★★★

Вопрос: можно ли как-нибудь переписать этот плеер так, чтоб он воспроизводил локальные файлы без шаманских действий с настройкой браузера (FF и chrome)? Если да, то в какую сторону копать?

Я не веб-разработчик.

Очевидно, что в эту.

t184256 ★★★★★
()

Для локальных задач есть десктопный софт.

Зачем натягивать браузер на локальные презентации?

anonymous8 ★★
()
Последнее исправление: anonymous8 (всего исправлений: 1)

И самый простой способ реализации вышеуказанного совета, насколько я знаю, это перейти в каталог с файлами и вызвать там: python3 -m http.server

gag ★★★★★
()
Ответ на: комментарий от vtVitus

Отдельный сервер - не проще.

А что, есть реализация web-сервера на js без nodejs в браузере?!

Хочется отдать 1 архив, распаковав который в какой-нибудь каталог и открыв в нем файл play.html при помощи браузера посмотреть записанную веб-конференцию.

vel ★★★★★
() автор топика
Ответ на: комментарий от gag

Гори в аду со своим питоном!

Хорошо, что никто пока не посоветовал поставить java!

Portable-версия какого-нибудь браузера, который имеет поддержку html5 - и то более разумное решение.

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

Вопрос был как объяснить браузеру, что origin у нас file: а не https?:

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

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

Короче: https://github.com/mconf/api-mate

Чот не видать такого салюшна для ббб.

deep-purple ★★★★★
()

Почему так (tldr: file:// - небезопасно):

Можно завернуть твой плеер в electron, по сути и получится «Portable-версия какого-нибудь браузера, который имеет поддержку html5»

anonymous
()

Вызывает недоумение запрет на доступ к локальным данным, если исходный файл так же локальный! Обращения к сетевым ресурсам при этом отсутствуют.

Если локальному html-файлу с javascript разрешить доступ к файлам, он потенциально может закачать содержимое этих файлов в интернет. Пароли из браузера там, или ещё что-нибудь с известным расположением.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Гм. У меня все элементы это локальные файлы. Схрена CORS ругается?

Если отключить privacy.file_unique_origin, то в консоли разработчика/сеть нет сетевых запросов при загрузке файлов плеера.

Ладно, xml файлы я могу тупо конвертнуть в .js и дальше оно великолепно отпарситься через DOMParser.parseFromString()

Далее возникает вопрос про .png файлы и .webm

png тоже можно завернуть в .js через uuencode

А вот что делать с .webm ?

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

Электрон - это один из вариантов.

Как вариант своя утилита на чем-нибудь кроссплатформенном, пускай поднимает сервер на localhost:9999, а потом открывает твою страничку по этому адресу в браузере по умолчанию. Для винды в exe статически скомпилил и всё, назвал start.exe. Думаю, даже совсем несмышленый юзер смогЁт.

Только в таком варианте придется еще окошко приложения показывать (как-то же потом сервер завершить нужно будет). Ну или взять Qt WebEngine, получится минимальный аналог электрона.

Stack77
()
Ответ на: комментарий от vel

У меня все элементы это локальные файлы. Схрена CORS ругается?

Допустим, у тебя есть HTML-файл с Javascript внутри. Пользователь открывает файл, браузер выполняет Javascript. Допустим, скриптам разрешено открывать на чтение любые локальные файлы. Скрипты открывают file:///etc/passwd, режут его на части и вставляют на страницу теги img, у который адрес указан как https://attacker.site/?data=..., где вместо многоточия — экранированное содержимое файла /etc/passwd. Далее скрипты парсят содержимое /etc/passwd, получают список имён пользователей, открывают /home/$username/.config/google-chrome/Default/Login Data и отсылают его содержимое через адреса в нововставленных img тегах.

Далее возникает вопрос про .png файлы и .webm

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

Ладно, xml файлы я могу тупо конвертнуть в .js и дальше оно великолепно отпарситься через DOMParser.parseFromString()

Можно ещё написать эмуляцию XMLHttpRequest, чтобы он поставлял данные из .js-файла. Тогда не придётся кромсать сгенерированный код, который у тебя уже есть.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

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

Ах вот оно как. Спасибо за разъяснения.

С нуля шагать в это js-болото тяжко.

Можно ещё написать эмуляцию XMLHttpRequest, чтобы он поставлял данные из .js-файла. Тогда не придётся кромсать сгенерированный код, который у тебя уже есть.

Ну не знаю пока. Там код все равно нужно подправить на тему путей.

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

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

Использовали для аналогичной задачи Mongoose. Б-гомерзких питоножаб не тащит, весит всего полмегабайта ;) Правда, архив рассчитан был только на виндузятников (но Mongoose и под Wine отлично работает).

README в две строчки всё же прилагался, впрочем. Но можно заменить его батником, который запускает Mongoose и открывает ссылку на него в браузере ;) А чтобы юзеры не пугались кучи файлов, можно положить всё, кроме батника, в поддиректорию.

mertvoprog
()
Ответ на: комментарий от vel

Для текстовых файлов можно заюзать JSONP. Картинки и webm - вместо запроса вставляешь js’ом <img> либо <video> тег.

fulmar_lor
()
Ответ на: комментарий от vel

Хочется отдать 1 архив, распаковав который в какой-нибудь каталог и открыв в нем файл play.html при помощи браузера посмотреть записанную веб-конференцию.

Залить на сервер, дать вместо архива ссылку?

goingUp ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.