Что значит "откреститься-открывалка" содержания политики безопасности директива делать?
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, в результате чего контекст просмотра открывающего окна перейдет к совершенно другому документу.