-
Notifications
You must be signed in to change notification settings - Fork 11.9k
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
CSP - style-src 'unsafe-inline' should not be required #5208
Comments
I confirm the bug, 2.6 is not affected |
We are having the same issue after upgrading to 2.7.1, is there any workaround to fix this without disabling/changing our current CSP policy ? Thank you !! |
@jrberlin you can add the hashes |
Hi CSP14321: Resource violated directive 'style-src 'self' 'sha256-fviu5RwuBYFcCd5CDanhy6NCLufcwvCAbm061aSqhoQ=' 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' 'sha256-OTeu7NEHDo6qutIWo0F2TmYrDhsKWCzrUgGoxxHGJ8o=' 'sha256-wS7xf+bhXBr5EM064hQkAW0vX3ks5VoxbGn+KQC/Vhk=' 'sha256-cxL35Ug49Sl1zHMOdz/r0xinQ6BYGgClHdDCk2XPTzE='' in Content-Security-Policy: inline style, in ourUrl at line 0 column 0. Resource will be blocked. the version of MS EDGE is 40.15063.674.0 and MS EdgeHTML is 15.15063, but I think is not the latest version. |
Any news on this? |
+1 Chart.js/src/platforms/platform.dom.js Line 169 in 3fe198c
which injects data with hardcoded style elements when enabling responsive:true & maintainAspectRatio: false Since the style injected is static, why not adding CSS classes and adding these class to the targeted element ? This is CSP compliant. |
+1 Chart.js/src/platforms/platform.dom.js Line 196 in 0963c8f
Chart.js/src/platforms/platform.dom.js Line 308 in 0963c8f
Chart.js/src/platforms/platform.dom.js Line 311 in 0963c8f
|
Hi, this is sort of blocking me from releasing https://tonic.technology — I'd be happy to make a PR. Possible fixes for the issues that @smariel points out could be...
|
Have there been any movement on this issue? I'm happy to try my hand at a PR to fix this? |
I fixed this by
This works at least on latest Firefox and Chrome. |
@fxOne @hxoht what would be your approach to implement this solution? Can you write a small snippet showing how it would work in HTML / Javascript? (I'm not familiar with CSP so don't fully get how it's supposed to be configured). |
Using a link element is also recommended approach linked StackOverflow question. Code is mostly a copy and paste from this answer. Fixes chartjs#5208 together with chartjs#5909
Using a link element is also recommended approach linked StackOverflow question. Code is mostly a copy and paste from this answer. Fixes chartjs#5208 together with chartjs#5909
This uses CSS Object Model (CSSOM) to modify stylesheets. Changing stylesheets via CSSOM does not violate Content-Security-Policy style-src 'none'. CSSOM is still a working draft but the features been used should be supported by all target browsers: https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/styleSheets#Browser_compatibility https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/insertRule#Browser_compatibility Creating an empty style element does not violate CSP. -webkit- prefix is not needed anymore for keyframe. Inserting CSS rule @-webkit-keyframews throws a SyntaxError in IE11. Done basic manual testing using samples in recent versions of: - Chrome (Desktop & Mobile) - Firefox - Microsoft Edge - IE 11 Fixes chartjs#5208 together with chartjs#5909 Live example: https://codepen.io/jelhan/pen/jXYymO Please note the CSP meta tag definied in settings. You need to update SHA hashes if you change any JavaScript in this Codepen as it violates CSP otherwise.
This uses CSS Object Model (CSSOM) to modify stylesheets. Changing stylesheets via CSSOM does not violate Content-Security-Policy style-src 'none'. CSSOM is still a working draft but the features been used should be supported by all target browsers: https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/styleSheets#Browser_compatibility https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/insertRule#Browser_compatibility Creating an empty style element does not violate CSP. -webkit- prefix is not needed anymore for keyframe. Inserting CSS rule @-webkit-keyframews throws a SyntaxError in IE11. Done basic manual testing using samples in recent versions of: - Chrome (Desktop & Mobile) - Firefox - Microsoft Edge - IE 11 Fixes chartjs#5208 together with chartjs#5909 Live example: https://codepen.io/jelhan/pen/jXYymO Please note the CSP meta tag definied in settings. You need to update SHA hashes if you change any JavaScript in this Codepen as it violates CSP otherwise.
This uses CSS Object Model (CSSOM) to modify stylesheets. Changing stylesheets via CSSOM does not violate Content-Security-Policy style-src 'none'. CSSOM is still a working draft but the features been used should be supported by all target browsers: https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/styleSheets#Browser_compatibility https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/insertRule#Browser_compatibility Creating an empty style element does not violate CSP. -webkit- prefix is not needed anymore for keyframe. Inserting CSS rule @-webkit-keyframews throws a SyntaxError in IE11. Done basic manual testing using samples in recent versions of: - Chrome (Desktop & Mobile) - Firefox - Microsoft Edge - IE 11 Fixes chartjs#5208 together with chartjs#5909 Live example: https://codepen.io/jelhan/pen/jXYymO Please note the CSP meta tag definied in settings. You need to update SHA hashes if you change any JavaScript in this Codepen as it violates CSP otherwise.
This uses CSS Object Model (CSSOM) to modify stylesheets. Changing stylesheets via CSSOM does not violate Content-Security-Policy style-src 'none'. CSSOM is still a working draft but the features been used should be supported by all target browsers: https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/styleSheets#Browser_compatibility https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/insertRule#Browser_compatibility Creating an empty style element does not violate CSP. -webkit- prefix is not needed anymore for keyframe. Inserting CSS rule @-webkit-keyframews throws a SyntaxError in IE11. Done basic manual testing using samples in recent versions of: - Chrome (Desktop & Mobile) - Firefox - Microsoft Edge - IE 11 Fixes chartjs#5208 together with chartjs#5909 Live example: https://codepen.io/jelhan/pen/jXYymO Please note the CSP meta tag definied in settings. You need to update SHA hashes if you change any JavaScript in this Codepen as it violates CSP otherwise.
Could someone who reported CSP errors be able to build PR #5952 and confirm that it solves this issue? |
I am not familiar with github and building a project, so I'm not sure I did the right thing... In #5952, clicked on Keeping But if I remove this policy, I still have a violiation in platform.dom.js:312: Chart.js/src/platforms/platform.dom.js Line 312 in 7cd3961
And I also have the following error at line 316: Chart.js/src/platforms/platform.dom.js Line 316 in 7cd3961
|
A nonce is usually a bad solution for most applications. The whole security relies on the hope that it cannot be guessed, since it doesn't rely on the content it protects. For this to work, the nonce must at least be changed for every request, which requires to dynamically create the HTML and adds further requirements for any user. Otherwise, it is only hiding the underlying issue and creates an (in my opinion) even bigger security problem, as somebody might now trust a still insecure implementation. A good and secure solution was already pointed out by @panuhorsmalahti, using a hash instead of a nonce and removing the CSS injection. Going further in this direction, the extracted CSS information could be inserted into a file (lets call it The switch could be set via import Chart from 'chart.js';
Chart.useSecureCSS = true; Lastly, adding some documentation to it, stating how to securely integrate the CSS code:
as well as deprecating the default injection (so folks know only the secure way would remain after the next major release and could prepare beforehand) could complete this solution and eases the change management pressure. |
Expected Behavior
Chart.js should not depend on the the
Content-Security-Policy: style-src 'unsafe-inline'
directive.Current Behavior
Chart.js adds errors to the console as the css is refused by the CSP rules
Possible Solution
Add a nonce attribute and make it possible to set the nonce.
See also: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#Unsafe_inline_script
Steps to Reproduce (for bugs)
Content-Security-Policy: style-src 'self'
directive setContext
This are the error messages:
The first error occurs in platform.dom.js:308 and the 2nd in platform.dom.js:311
Environment
The text was updated successfully, but these errors were encountered: