pr_19550.patch 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. diff --git a/services/web/app/src/infrastructure/CSP.js b/services/web/app/src/infrastructure/CSP.js
  2. index 28f4f380d3d..abc11c59a48 100644
  3. --- a/services/web/app/src/infrastructure/CSP.js
  4. +++ b/services/web/app/src/infrastructure/CSP.js
  5. @@ -6,6 +6,7 @@ module.exports = function ({
  6. reportPercentage,
  7. reportOnly = false,
  8. exclude = [],
  9. + viewDirectives = {},
  10. }) {
  11. const header = reportOnly
  12. ? 'Content-Security-Policy-Report-Only'
  13. @@ -33,7 +34,12 @@ module.exports = function ({
  14. res.locals.scriptNonce = scriptNonce
  15. - const policy = buildViewPolicy(scriptNonce, reportPercentage, reportUri)
  16. + const policy = buildViewPolicy(
  17. + scriptNonce,
  18. + reportPercentage,
  19. + reportUri,
  20. + viewDirectives[view]
  21. + )
  22. // Note: https://csp-evaluator.withgoogle.com/ is useful for checking the policy
  23. @@ -68,11 +74,17 @@ const buildDefaultPolicy = (reportUri, styleSrc) => {
  24. return directives.join('; ')
  25. }
  26. -const buildViewPolicy = (scriptNonce, reportPercentage, reportUri) => {
  27. +const buildViewPolicy = (
  28. + scriptNonce,
  29. + reportPercentage,
  30. + reportUri,
  31. + viewDirectives
  32. +) => {
  33. const directives = [
  34. `script-src 'nonce-${scriptNonce}' 'unsafe-inline' 'strict-dynamic' https: 'report-sample'`, // only allow scripts from certain sources
  35. `object-src 'none'`, // forbid loading an "object" element
  36. `base-uri 'none'`, // forbid setting a "base" element
  37. + ...(viewDirectives ?? []),
  38. ]
  39. if (reportUri) {
  40. --- a/services/web/config/settings.defaults.js
  41. +++ b/services/web/config/settings.defaults.js
  42. @@ -868,6 +868,9 @@ module.exports = {
  43. reportPercentage: parseFloat(process.env.CSP_REPORT_PERCENTAGE) || 0,
  44. reportUri: process.env.CSP_REPORT_URI,
  45. exclude: ['app/views/project/editor'],
  46. + viewDirectives: {
  47. + 'app/views/project/ide-react': [`img-src 'self' data: blob:`],
  48. + },
  49. },
  50. unsupportedBrowsers: {