Почему встроенные блоки JS небезопасны?

Я читаю документ расширения Chrome " Политика безопасности контента (CSP)". Это говорит:

Встроенный JavaScript, а также опасные методы string-to-JavaScript, такие как eval, не будут выполняться. Это ограничение запрещает как встроенные блоки, так и встроенные обработчики событий (например, <button onclick="...">).

...

Не существует механизма для ослабления ограничения на выполнение встроенного JavaScript. В частности, установка политики сценариев, включающей unsafe-inline, не будет иметь никакого эффекта. Это намеренно.

Почему встроенные <script> блоки небезопасны? Кто-нибудь может это объяснить? Будет лучше, если вы сможете привести примеры.

Спасибо.

1 ответ

Решение

Как говорится на странице:

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

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

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

Например, если у вас есть форма, которую пользователь может заполнить. Пользователь может ввести тег сценария с некоторым количеством JS. Допустим, это как дискуссионный форум. Я захожу и создаю тему, но в ней есть какой-то скрытый JS. Давайте также предположим, что вы не очищаете это перед публикацией. Теперь в моем сообщении есть JS, который будет выполняться каждый раз, когда кто-то просматривает его. Это предотвращает выполнение этого скрипта.

Другие вопросы по тегам