Что значит "откреститься-открывалка" содержания политики безопасности директива делать?
CSPv3 задает новое открестился-открывалка политики
Директива disown-opener гарантирует, что ресурсоткажется от своего opener при переходе к нему.
Связанная спецификация WHATWG также не очень полезна:
Атрибут opener IDL объекта Window при получении должен возвращать объект WindowProxy контекста просмотра, из которого был создан текущий контекст просмотра (его контекст просмотра opener), если он существует, если он есть. по-прежнему доступен, и если текущий контекст просмотра не отрекся от своего открывателя; в противном случае он должен вернуть значение null. По настройке, если новое значение равно null, то текущий контекст обзора необходимо отказаться от своих открывалка; если новое значение больше ничего, то агент пользователя должен вызвать [[DefineOwnProperty]] внутренний метод объекта window, передавая имя свойства "открывашка" как свойство ключа, и собственность дескриптор { [[значение]]: значение, [[для записи]]: так, [[перечислить]]: правда, [[Конфигурируемый]]: true } в качестве дескриптора Свойства, где value-новое значение.
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
, в результате чего контекст просмотра открывающего окна перейдет к совершенно другому документу.