Что значит "откреститься-открывалка" содержания политики безопасности директива делать?


CSPv3 задает новое открестился-открывалка политики

Директива disown-opener гарантирует, что ресурсоткажется от своего opener при переходе к нему.

Связанная спецификация WHATWG также не очень полезна:

Атрибут opener IDL объекта Window при получении должен возвращать объект WindowProxy контекста просмотра, из которого был создан текущий контекст просмотра (его контекст просмотра opener), если он существует, если он есть. по-прежнему доступен, и если текущий контекст просмотра не отрекся от своего открывателя; в противном случае он должен вернуть значение null. По настройке, если новое значение равно null, то текущий контекст обзора необходимо отказаться от своих открывалка; если новое значение больше ничего, то агент пользователя должен вызвать [[DefineOwnProperty]] внутренний метод объекта window, передавая имя свойства "открывашка" как свойство ключа, и собственность дескриптор { [[значение]]: значение, [[для записи]]: так, [[перечислить]]: правда, [[Конфигурируемый]]: true } в качестве дескриптора Свойства, где value-новое значение.

1 3

1 ответ:

Это вызывает window.opener для установки значения null в любых новых окнах или вкладках, которые переходят в любой документ, обслуживаемый заголовком CSP, содержащим директиву disown-opener.

Случай использования аналогичен случаю для rel=noopener.

Класс атак, которые оба предназначены для предотвращения, вызван тем, что когда, например, у вас есть ссылки в документе A на документ B (потенциально в другом источнике), любой скрипт в документе B может через значение window.opener получить доступ и управлять объектом window В документе A.

Таким образом, скрипт документа B может изменить значение window.opener.location для окна, в котором находится документ A, на URL документа C, так что окно переходит от документа A к этому URL.

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

Матиас Байненс подробно рассматривает эту проблему в О rel=noopener: какие проблемы это решает проблему?.

Установка window.opener на null в документе, к которому осуществляется переход, предотвращает проблему.

Без disown-opener для случая использования, который он адресует, документ A сначала должен был бы открыть новую вкладку / Окно для документа / местоположения, которым он управляет, затем использовать скрипт для установки window.opener в null, затем иметь скрипт в документе в этой вкладке / окне, чтобы перейти к документу B.

Обновление 1: я поднял PR против спецификации HTML , чтобы добавить информационные заметки к спецификация для этого.

Обновление 2: патч из PR выше был объединен в спецификацию HTML, поэтому он теперь имеет эту заметку:

Если контекст просмотра являетсянепризнанным , его атрибут window.opener равен null. Это предотвращает скрипты в контексте просмотра от изменения каких-либо свойств его открывающего объекта контекста просмотра Window (т. е. объекта Window, из которого был создан контекст просмотра).

В противном случае, если просмотр контекст не является непризнанным , то скрипты в этом контексте просмотра могут использовать window.opener для изменения свойств объекта Window его открывающего контекста просмотра. Например, сценарий, запущенный в контексте просмотра, может изменить значение window.opener.location, в результате чего контекст просмотра открывающего окна перейдет к совершенно другому документу.