История изменений
Исправление wandrien, (текущая версия) :
Предположу, что могут возникнуть проблемы с версиями. Одно дело, когда сервер отдаёт на исполнение свой код, точно зная что там, и другое - когда версии у библиотек у него и на стороне клиента должны совпадать для такой уверенности.
Ничего страшного, если будет много версий. Если все они относятся к одному опенсорсному продукту и не содержат известных уязвимостей, позволяющих выполнить произвольный код в eval()
, то для пользователя не важно, какую версию исполняет сайт. Сайт может исполнять ту, которую ему и требуется.
Можно хранить на локалхосте только хэш-суммы известных приложений, а код скачивать как обычно тэгом script. Для ресурсов уже предсмотрена проверка целостности через хэш-суммы, так что в самих тэгах ничего не изменится:
<script src="https://cdnjs.cloudflare.com/ajax/libs/intercooler-js/1.2.3/intercooler.min.js" integrity="sha512-cGFWDjclOPdq15RV16krqIZNRnaXehJpgwtcX+VrIO+UgOsdg3mURsdN27Z9PWnov+f8mZSPZfx14R7w+rSYOw==" crossorigin="anonymous"></script>
Зная хэш-сумму, браузер не обязательно даже будет скачивать код с указанного CDN. Он может обратиться к какому-нибудь собственному CDN, которым управляет некоммерческий фонд.
Далее нужно будет предусмотреть возможность инициализировать приложение с параметрами, нужными для сайта. Варианты:
- Позволить исполнять на странице небольшие фрагменты кода, выполняющие инициализацию этих приложений. Например, FSFшный плагин LibreJS позволяет исполнять код, который он автоматически определяет как «тривиальный». Что-то такое придумать. Так себе вариант, но можно попробовать реализовать, чтобы понять реальные drawbacks.
- Специфицировать декларативный протокол в виде json, позволяющий передать в приложение аргументы инициализации. Тут потребуются небольшие обертки под каждое приложение. Сначала, придётся их писать разработчикам этой идеи. А потом может подтянутся и авторы библиотек и сразу будут поставлять библиотеки с совместимыми API.
Может лучше стандартизованный API для каких-то нужных действий. А клиент уже на своей стороне может поддерживать это апи каким угодно кодом.
«Нужных действий» на все случаи жизни не напасёшься. Пусть браузер занимается непосредственно работой песочницы и API на уровне связи песочницы и внешнего мира. У них и так работы очень много в этой области. А на уровне логики внутри песочницы — можно управлять ею через вот такой контроль «приложений», или «протоколов», или «API». Тут суть не в названии, а в том, чтобы компонент, который обеспечивает управление такими прикладными API, был разработан и стандартизирован отдельно от движка браузера. Это позволит любой браузер с поддержкой экстеншенов превратить в совместимый с идеей.
И еще суть в том, что если вы используете обычный браузер, то в нём просто всёработает как обычно. Он исполняет код JS.
А используете браузер с такой защитой, то он… тоже просто исполняет код JS. Но весь код проверен, и есть гарантия, что это опенсорсный код без трекинга и закладок. А который не проверен, запрещен.
Исправление wandrien, :
Предположу, что могут возникнуть проблемы с версиями. Одно дело, когда сервер отдаёт на исполнение свой код, точно зная что там, и другое - когда версии у библиотек у него и на стороне клиента должны совпадать для такой уверенности.
Ничего страшного, если будет много версий. Если все они относятся к одному опенсорсному продукту и не содержат известных уязвимостей, позволяющих выполнить произвольный код в eval()
, то для пользователя не важно, какую версию исполняет сайт. Сайт может исполнять ту, которую ему и требуется.
Можно хранить на локалхосте только хэш-суммы известных приложений, а код скачивать как обычно тэгом script. Для ресурсов уже предсмотрена проверка целостности через хэш-суммы, так что в самих тэгах ничего не изменится:
<script src="https://cdnjs.cloudflare.com/ajax/libs/intercooler-js/1.2.3/intercooler.min.js" integrity="sha512-cGFWDjclOPdq15RV16krqIZNRnaXehJpgwtcX+VrIO+UgOsdg3mURsdN27Z9PWnov+f8mZSPZfx14R7w+rSYOw==" crossorigin="anonymous"></script>
Зная хэш-сумму, браузер не обязательно даже будет скачивать код с указанного CDN. Он может обратиться к какому-нибудь собственному CDN, которым управляет некоммерческий фонд.
Далее нужно будет предусмотреть возможность инициализировать приложение с параметрами, нужными для сайта. Варианты:
- Позволить исполнять на странице небольшие фрагменты кода, выполняющие инициализацию этих приложений. Например, плагин FSFшный плагин LibreJS позволяет исполнять код, который он автоматически определяет как «тривиальный». Что-то такое придумать. Так себе вариант, но можно попробовать реализовать, чтобы понять реальные drawbacks.
- Специфицировать декларативный протокол в виде json, позволяющий передать в приложение аргументы инициализации. Тут потребуются небольшие обертки под каждое приложение. Сначала, придётся их писать разработчикам этой идеи. А потом может подтянутся и авторы библиотек и сразу будут поставлять библиотеки с совместимыми API.
Может лучше стандартизованный API для каких-то нужных действий. А клиент уже на своей стороне может поддерживать это апи каким угодно кодом.
«Нужных действий» на все случаи жизни не напасёшься. Пусть браузер занимается непосредственно работой песочницы и API на уровне связи песочницы и внешнего мира. У них и так работы очень много в этой области. А на уровне логики внутри песочницы — можно управлять ею через вот такой контроль «приложений», или «протоколов», или «API». Тут суть не в названии, а в том, чтобы компонент, который обеспечивает управление такими прикладными API, был разработан и стандартизирован отдельно от движка браузера. Это позволит любой браузер с поддержкой экстеншенов превратить в совместимый с идеей.
И еще суть в том, что если вы используете обычный браузер, то в нём просто всёработает как обычно. Он исполняет код JS.
А используете браузер с такой защитой, то он… тоже просто исполняет код JS. Но весь код проверен, и есть гарантия, что это опенсорсный код без трекинга и закладок. А который не проверен, запрещен.
Исходная версия wandrien, :
Предположу, что могут возникнуть проблемы с версиями. Одно дело, когда сервер отдаёт на исполнение свой код, точно зная что там, и другое - когда версии у библиотек у него и на стороне клиента должны совпадать для такой уверенности.
Ничего страшного, если будет много версий. Если все они относятся к одному опенсорсному продукту и не содержат известных уязвимостей, позволяющих выполнить произвольный код в eval()
, то для пользователя не важно, какую версию исполняет сайт. Сайт может исполнять ту, которую ему и требуется.
Можно хранить на локалхосте только хэш-суммы известных приложений, а код скачивать как обычно тэгом script. Для ресурсов уже предсмотрена проверка целостности через хэш-суммы, так что в самих тэгах ничего не изменится:
<script src="https://cdnjs.cloudflare.com/ajax/libs/intercooler-js/1.2.3/intercooler.min.js" integrity="sha512-cGFWDjclOPdq15RV16krqIZNRnaXehJpgwtcX+VrIO+UgOsdg3mURsdN27Z9PWnov+f8mZSPZfx14R7w+rSYOw==" crossorigin="anonymous"></script>
Далее нужно будет предусмотреть возможность инициализировать приложение с параметрами, нужными для сайта. Варианты:
- Позволить исполнять на странице небольшие фрагменты кода, выполняющие инициализацию этих приложений. Например, плагин FSFшный плагин LibreJS позволяет исполнять код, который он автоматически определяет как «тривиальный». Что-то такое придумать. Так себе вариант, но можно попробовать реализовать, чтобы понять реальные drawbacks.
- Специфицировать декларативный протокол в виде json, позволяющий передать в приложение аргументы инициализации. Тут потребуются небольшие обертки под каждое приложение. Сначала, придётся их писать разработчикам этой идеи. А потом может подтянутся и авторы библиотек и сразу будут поставлять библиотеки с совместимыми API.
Может лучше стандартизованный API для каких-то нужных действий. А клиент уже на своей стороне может поддерживать это апи каким угодно кодом.
«Нужных действий» на все случаи жизни не напасёшься. Пусть браузер занимается непосредственно работой песочницы и API на уровне связи песочницы и внешнего мира. У них и так работы очень много в этой области. А на уровне логики внутри песочницы — можно управлять ею через вот такой контроль «приложений», или «протоколов», или «API». Тут суть не в названии, а в том, чтобы компонент, который обеспечивает управление такими прикладными API, был разработан и стандартизирован отдельно от движка браузера. Это позволит любой браузер с поддержкой экстеншенов превратить в совместимый с идеей.
И еще суть в том, что если вы используете обычный браузер, то в нём просто всёработает как обычно. Он исполняет код JS.
А используете браузер с такой защитой, то он… тоже просто исполняет код JS. Но весь код проверен, и есть гарантия, что это опенсорсный код без трекинга и закладок. А который не проверен, запрещен.