Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(CustomResizeObserver): remove set src to iframe #7933

Merged

Conversation

EldarMuhamethanov
Copy link
Contributor

@EldarMuhamethanov EldarMuhamethanov commented Nov 12, 2024

  • Release notes

Описание

Сейчас CustomResizeObserver в своей реализации использует создание iframe-ов для отслеживания их размеров. При создании он устанавливает src="javascript:void(0)", что может вызывать проблемы с Content Security Policy (CSP) при следующих заголовках:

  • script-src - ограничивает источники выполняемых скриптов
  • frame-src - ограничивает источники для iframe-ов

Для решения этой проблемы предлагается не устанавливать атрибут src явно, так как браузер по умолчанию использует about:blank.

Плюсы такого подхода:

  1. Совместимость с CSP - отсутствие явного javascript: URL не нарушает политику безопасности
  2. Меньше кода - нет необходимости явно указывать src
  3. Стандартное поведение - использование браузерного дефолта about:blank
  4. Более безопасное решение - about:blank является доверенным источником

Изменения

  • Убрал установку атрибута src для создаваемого iframe'а, позволяя браузеру использовать стандартное значение about:blank

Release notes

Исправления

  • Исправлены ошибки в Content Security Policy (CSP) связанные с тем, что в CustomResizeObserver создавался iframe с src="javascript:void(0)", теперь iframe создается без явного указания src, что позволяет браузеру самостоятельно заполнить это поле. Значение по умолчанию для браузеров: src="about:blank"

@EldarMuhamethanov EldarMuhamethanov added this to the v6.7.4 milestone Nov 12, 2024
@EldarMuhamethanov EldarMuhamethanov self-assigned this Nov 12, 2024
@EldarMuhamethanov EldarMuhamethanov requested a review from a team as a code owner November 12, 2024 11:11
Copy link
Contributor

size-limit report 📦

Path Size
JS 385.5 KB (-0.01% 🔽)
JS (gzip) 123.19 KB (-0.02% 🔽)
JS (brotli) 102.12 KB (+0.08% 🔺)
JS import Div (tree shaking) 1.47 KB (0%)
CSS 342.46 KB (0%)
CSS (gzip) 49.36 KB (0%)
CSS (brotli) 40 KB (0%)

Copy link

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

Copy link
Contributor

e2e tests

⚠️ Some screenshots were failed. See Playwright Report.

Playwright Report

Copy link
Contributor

👀 Docs deployed

Commit c7a5b5d

Copy link

codecov bot commented Nov 12, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 95.30%. Comparing base (75f5a11) to head (c7a5b5d).
Report is 1 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #7933      +/-   ##
==========================================
- Coverage   95.30%   95.30%   -0.01%     
==========================================
  Files         378      378              
  Lines       11196    11195       -1     
  Branches     3735     3735              
==========================================
- Hits        10670    10669       -1     
  Misses        526      526              
Flag Coverage Δ
unittests 95.30% <ø> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@andrey-medvedev-vk andrey-medvedev-vk added patch Автоматизация: PR продублируется в ветку последнего минорного релиза для выпуска патча v6 Автоматизация: PR продублируется в ветку v6 labels Nov 12, 2024
Copy link
Contributor

@andrey-medvedev-vk andrey-medvedev-vk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Отличное описание 👏

Я бы подправил release notes кроме окончаний ещё и то, что значение мы сами не выставляем, отдавая это браузеру:

- - Исправлены ошибки в консоли связанная с тем, что в CustomResizeObserver создавался iframe с `src="javascript:void(0)"` теперь создается с `src="about:blank"`
+ - Исправлены ошибки в `Content Security Policy (CSP)` связанные с тем, что в `CustomResizeObserver` создавался `iframe` с `src="javascript:void(0)"`, теперь `iframe` создается без явного указания `src`, что позволяет браузеру самостоятельно заполнить это поле. Значение по умолчанию для браузеров: `src="about:blank"`

@EldarMuhamethanov EldarMuhamethanov merged commit a71c41a into master Nov 12, 2024
27 of 28 checks passed
@EldarMuhamethanov EldarMuhamethanov deleted the e.muhamethanov/change-resize-observer-ifram-src branch November 12, 2024 13:06
@vkcom-publisher
Copy link
Contributor

❌ Patch

Не удалось автоматически применить исправление на ветке 7.0-stable.

Дальнейшие действия выполняют контрибьютеры из группы @VKCOM/vkui-core

Чтобы изменение попало в ветку 7.0-stable, выполните следующие действия:

  1. Создайте новую ветку от 7.0-stable и примените изменения используя cherry-pick
git stash # опционально
git fetch origin 7.0-stable
git checkout -b patch/pr7933 origin/7.0-stable

git cherry-pick --no-commit a71c41aa0a935704f79dbec20bd1a6107ce0694f
git checkout HEAD **/__image_snapshots__/*.png
git diff --quiet HEAD || git commit --no-verify --no-edit
  1. Исправьте конфликты, следуя инструкциям из терминала
  2. Отправьте ветку на GitHub и создайте новый PR с веткой 7.0-stable (установка лейбла не требуется!)
git push --set-upstream origin patch/pr7933
gh pr create --base 7.0-stable --title "patch: pr7933" --body "- patch #7933"

EldarMuhamethanov added a commit that referenced this pull request Nov 12, 2024
@EldarMuhamethanov EldarMuhamethanov mentioned this pull request Nov 12, 2024
EldarMuhamethanov added a commit that referenced this pull request Nov 12, 2024
* fix(CustomResizeObserver): remove set src to iframe (#7933)

(cherry picked from commit a71c41a)

* fix(CustomResizeObserver): fix test
@vkcom-publisher
Copy link
Contributor

v6.7.4 🎉

@vkcom-publisher
Copy link
Contributor

v7.0.0-beta.2 🎉

@inomdzhon inomdzhon modified the milestones: v7.0.0-beta.2, v7.0.0 Dec 2, 2024
@vkcom-publisher
Copy link
Contributor

v7.0.0 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
patch Автоматизация: PR продублируется в ветку последнего минорного релиза для выпуска патча type:bug v6 Автоматизация: PR продублируется в ветку v6
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

4 participants