Следующий ответ верен для более старых версий Chrome (& lt; 46). Для более поздних, пожалуйста, проверьте @ Chris-Hunt answer https://stackoverflow.com/a/38554505/422670
Я только что опубликовал очень похожий ответ на вопрос https://stackoverflow.com/a/11670319/422670
Как уже было сказано, невозможно отключить встроенную политику безопасности в расширениях v2 . unsafe-inline
просто не работает намеренно.
На самом деле нет другого способа, чем перемещать все ваши javascript в js-файлы и указывать на них с помощью .
Там, хотя, возможность делать Eval и новую функцию внутри изолированного iframe, например, со следующими строками в манифесте:
"sandbox": {
"pages": [
"page1.html",
"directory/page2.html"
]
},
Песочница не будет иметь доступа к API расширения или приложения или прямой доступ к незанятым страницам (он может связываться с ними через postMessage ()). Вы также можете ограничить права на песочницу конкретным CSP
. Теперь есть полный пример из команды Google Chrome на g3b galub eval в iframe о том, как обойти проблему, обмениваясь с изолированный iframe, а также краткое руководство по аналитике
. Благодаря Google в линейке много переписывания расширений: (
EDIT
g15]
Можно устранить политику безопасности для REMOTE-скриптов, но не для строк.
Политика против
eval()
и ее родственников, таких какsetTimeout(String)
,setInterval(String)
иnew Function(String)
можно смягчить, добавив'unsafe-eval'
к вашей политике:"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
Однако мы настоятельно рекомендуем против этого. Эти функции являются известными векторами атаки XSS.
blockquote>это появилось в документации trunk и обсуждается в потоке «eval re-allowed»
inline scripts
не вернется, хотя :Нет механизма для ослабления ограничения против execu встроенный JavaScript. В частности, установка политики скрипта, которая включает
blockquote>'unsafe-inline'
, не будет иметь никакого эффекта.
Сериализация чревата ловушками. Автоматическая поддержка сериализации этой формы делает часть внутренностей класса общедоступного API (который является, почему javadoc дает Вам сохраненные формы классов ).
Для долгосрочной персистентности, класс должен быть в состоянии декодировать эту форму, которая ограничивает изменения, которые можно внести для классификации дизайна. Это повреждает инкапсуляцию.
Сериализация может также привести к проблемам безопасности. Способностью сериализировать любой объект это имеет ссылку на, класс может получить доступ к данным, это обычно не было бы в состоянии к (путем парсинга результирующих данных байта).
существуют другие проблемы, такие как сериализированная форма внутренних классов, не являющихся четко определенным.
Создание всех сериализуемых классов усилило бы эти проблемы. Выезд Эффективный Java Второй Выпуск , в особенности Объект 74: Реализация, сериализуемая рассудительно .
Я думаю и Java и.Net люди поняли его превратно на этот раз, будут лучше сделать все сериализуемым по умолчанию и только должны отметить те классы, которые не могут быть безопасно сериализированы вместо этого.
, Например, в Smalltalk (язык, созданный в 70-х), каждый объект является сериализуемым по умолчанию. Я понятия не имею, почему дело обстоит не так в Java, рассматривая то, что подавляющее большинство объектов безопасно сериализировать и всего несколько из них не.
отмечание объекта как сериализуемый (с интерфейсом) волшебно не делает тот объект сериализуемым, это было сериализуемым все время , это просто, что теперь Вы выразили что-то, что система, возможно, нашла самостоятельно, таким образом, я не вижу очень хороших оснований для сериализации, являющейся способом, которым это теперь.
я думаю, что это было или плохое решение, принятое разработчиками или сериализация, была запоздалая мысль, или платформа никогда не была готова сделать сериализацию по умолчанию на всех объектах безопасно и последовательно.
Не все является по-настоящему сериализуемым. Возьмите сетевое сокетное соединение, например. Вы могли сериализировать данные/состояние своего объекта сокета, но сущность активного соединения будет потеряна.
Основная роль сериализуемых в Java должна на самом деле сделать, по умолчанию, все другие объекты несериализуемыми. Сериализация является очень опасным механизмом, особенно в его реализации по умолчанию. Следовательно, как дружба в C++, это прочь по умолчанию, даже если это стоит немногого для создания вещей сериализуемыми.
Сериализация добавляет ограничения и потенциальные проблемы, так как совместимость структуры не обеспечивается. Хорошо, что это прочь по умолчанию.
я должен признать, что видел очень немного нетривиальных классов, где стандартная сериализация делает то, к чему я хочу ее. Особенно в случае сложных структур данных. Так усилие Вы потратили бы создание класса serializble правильно карлики стоимость добавления интерфейса.
Для некоторых классов, особенно те, которые представляют что-то более физическое как Файл, Сокет, Поток или соединение с БД, не имеет абсолютно никакого смысла сериализировать экземпляры. Для многих других Сериализация может быть проблематичной, потому что она уничтожает ограничения уникальности или просто вынуждает Вас иметь дело с экземплярами различных версий класса, который Вы не можете хотеть.
Возможно, возможно, было лучше сделать все сериализуемым по умолчанию и сделать классы несериализуемыми через ключевое слово или интерфейс маркера - но тогда, те, кто должен использовать ту опцию, вероятно, не думали бы об этом. Путем это, если необходимо реализовать сериализуемый, Вам скажет так Исключение.
Ну, мой ответ - то, что это не ни на каком серьезном основании. И из Ваших комментариев I видят, что Вы уже изучили это. Другие языки счастливо пытаются сериализировать все, что не вскакивает на дерево после подсчета к 10. Объект должен принять значение по умолчанию, чтобы быть сериализуемым.
Так, то, что в основном необходимо сделать, читается все свойства стороннего класса сами. Или, если это - опция для Вас: декомпилируйте, поместите проклятое ключевое слово там и перекомпилируйте.
Я думаю, хотя должен был удостовериться Вы, как программист, знать что Ваш объект мой быть сериализированным.
Необходимость указать explicitely, что экземпляры определенного класса являются сериализуемыми язык, вынуждает Вас думать о том, если Вы необходимо позволить это. Для простого значения сериализация объектов тривиальна, но в более сложных случаях необходимо действительно продумать вещи.
, просто полагаясь на стандартную поддержку сериализации JVM Вы представляете себя всем видам противных проблем управления версиями.
Уникальность, ссылки на 'реальные' ресурсы, таймеры и много других типов артефактов НЕ являются кандидатами на сериализацию.
В Java есть некоторые вещи, которые просто не могут быть сериализованы, потому что они зависят от времени выполнения. Такие вещи, как потоки, потоки, время выполнения, и т.д., и даже некоторые классы графического интерфейса (которые связаны с базовой ОС) не могут быть сериализованным.