Feature: Introduce subresource integrity checks (SRI) for frontend assets (#100983)
* feat(featuremgmt): introduce feature toggle for enabling sri checks * feat(frontend): use assetSriChecks feature toggle to inject integrity hash into script tags * chore(webpack): align sri algorithms across dev and prod builds * docs(featuremgmt): update assetSriChecks to pass CI * docs(featuremgmt): fix more spelling complaints with assetSriChecks * Add crossorigin attribute * chore(webpack): add subresource-integrity plugin * build(webpack): wrap webpack jsonp loader integrity checks in feature flag checks * revert(index.html): remove crossorigin attribute if assertSriChecks is disabled --------- Co-authored-by: Kristian Bremberg <kristian.bremberg@grafana.com>
This commit is contained in:
@@ -10,8 +10,10 @@ const { EnvironmentPlugin } = require('webpack');
|
||||
const WebpackAssetsManifest = require('webpack-assets-manifest');
|
||||
const { WebpackManifestPlugin } = require('webpack-manifest-plugin');
|
||||
const { merge } = require('webpack-merge');
|
||||
const { SubresourceIntegrityPlugin } = require('webpack-subresource-integrity');
|
||||
|
||||
const getEnvConfig = require('./env-util.js');
|
||||
const FeatureFlaggedSRIPlugin = require('./plugins/FeatureFlaggedSriPlugin');
|
||||
const common = require('./webpack.common.js');
|
||||
const esbuildTargets = resolveToEsbuildTarget(browserslist(), { printUnknownTargets: false });
|
||||
|
||||
@@ -51,6 +53,9 @@ module.exports = (env = {}) =>
|
||||
}),
|
||||
],
|
||||
},
|
||||
output: {
|
||||
crossOriginLoading: 'anonymous',
|
||||
},
|
||||
optimization: {
|
||||
nodeEnv: 'production',
|
||||
minimize: parseInt(env.noMinify, 10) !== 1,
|
||||
@@ -70,6 +75,8 @@ module.exports = (env = {}) =>
|
||||
new MiniCssExtractPlugin({
|
||||
filename: 'grafana.[name].[contenthash].css',
|
||||
}),
|
||||
new SubresourceIntegrityPlugin(),
|
||||
new FeatureFlaggedSRIPlugin(),
|
||||
/**
|
||||
* I know we have two manifest plugins here.
|
||||
* WebpackManifestPlugin was only used in prod before and does not support integrity hashes
|
||||
@@ -77,6 +84,7 @@ module.exports = (env = {}) =>
|
||||
new WebpackAssetsManifest({
|
||||
entrypoints: true,
|
||||
integrity: true,
|
||||
integrityHashes: ['sha384', 'sha512'],
|
||||
publicPath: true,
|
||||
}),
|
||||
new WebpackManifestPlugin({
|
||||
|
||||
Reference in New Issue
Block a user