-
Notifications
You must be signed in to change notification settings - Fork 78
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
Allow 'strict-dynamic' scripts to inject styles #625
Comments
This came up very briefly here:
I would also like to see this. |
I think this proposal makes a lot of sense. If we are extending trust to a script via a nonce, then anything that script does should be trusted, including setting dynamic styles. |
Hi @mikewest |
I am talking in the context of Javascript frameworks (e.g. React, Vue, etc.)
CSP is hard to implement in this context because these frameworks inject a lot of dynamic elements on the client side.
Fortunately, we have
'strict-dynamic'
, so if we allow the root script by nonce or hash, this solves a lot of issues.But currently, one of the limitations of
'strict-dynamic'
is that it can only delegate approval to other<script>
elements.And unfortunately, these frameworks insert a lot of
<style>
elements at runtime.So, as it stands now, we have to resort to
style-src: 'self' 'unsafe-inline' https:;
for styles:'unsafe-inline'
is required so that the framework can insert inline styles'self' https:
and other name-based allowlists variants are required to insert external styles, because using a nonce or hash for external stylesheets that we know are legit would cancel'unsafe-inline'
If a script has been allowed by nonce or hash, it is itself a secure context - therefore (unless I'm mistaken) any inline or external style that it decides to inject is legit.
Would it then be possible to extend the scope of
'strict-dynamic'
to styles inserted by a secure script?And maybe not only to styles but to any element by the same logic?
The text was updated successfully, but these errors were encountered: