Skip to content

Commit df215da

Browse files
committed
fix: use vite-plugin-csp-guard to generate csp and subresource integrity checks
1 parent 3478a06 commit df215da

File tree

8 files changed

+163
-6
lines changed

8 files changed

+163
-6
lines changed

.github/workflows/generate-changelog.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
runs-on: ubuntu-latest
1313

1414
steps:
15-
- uses: actions/setup-python@v3
15+
- uses: actions/setup-python@v4
1616
with:
1717
python-version: "3.9"
1818

web/nginx/config/security.conf

-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,5 @@
22
add_header X-XSS-Protection "1; mode=block" always;
33
add_header X-Content-Type-Options "nosniff" always;
44
add_header Referrer-Policy "no-referrer-when-downgrade" always;
5-
add_header Content-Security-Policy "default-src 'self' http: https: ws: wss: data: blob: 'unsafe-inline'; frame-ancestors 'self';" always;
65
add_header Permissions-Policy "interest-cohort=()" always;
76
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

web/nginx/environments/web.dev.conf

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
proxy_pass http://web:3000/;
2-
2+
include /etc/nginx/config/security.conf;
33
include /etc/nginx/config/general.conf;
44
include /etc/nginx/config/proxy.conf;
55
include /etc/nginx/config/websocket.conf;

web/nginx/environments/web.prod.conf

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
root /data/www/;
2+
include /etc/nginx/config/security.conf;
23
include /etc/nginx/config/general.conf;
34
include /etc/nginx/config/websocket.conf;
45
index index.html;

web/nginx/sites-available/default.conf

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ server {
44
client_max_body_size 2G;
55

66
# security
7+
# NOTE: This also need to be included in the location block IF there are other headers being set at that level
78
include /etc/nginx/config/security.conf;
89

910
# logs

web/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"typescript": "~5.7.3",
4747
"vite": "^6.0.7",
4848
"vite-plugin-checker": "^0.8.0",
49+
"vite-plugin-csp-guard": "^2.0.1",
4950
"vite-plugin-svgr": "^4.3.0",
5051
"vite-tsconfig-paths": "^5.1.4",
5152
"vitest": "^2.1.8"

web/vite.config.mts

+17
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import react from '@vitejs/plugin-react'
22
import { defineConfig } from 'vite'
33
import checker from 'vite-plugin-checker'
4+
import csp from 'vite-plugin-csp-guard'
45
import svgrPlugin from 'vite-plugin-svgr'
56
import viteTsConfigPaths from 'vite-tsconfig-paths'
67

@@ -12,6 +13,22 @@ export default defineConfig({
1213
react(),
1314
viteTsConfigPaths(),
1415
svgrPlugin(),
16+
csp({
17+
dev: {
18+
run: true,
19+
},
20+
policy: {
21+
'default-src': ["'self'"],
22+
'font-src': ["'self'", 'https://*.equinor.com'],
23+
'style-src': ["'self'", "'unsafe-inline'", 'https://*.equinor.com'],
24+
'script-src-elem': ["'self'"],
25+
'connect-src': ['self', 'https://*.microsoftonline.com', 'http:', ' https:', 'ws:', 'wss:', 'data:', 'blob:'],
26+
},
27+
build: {
28+
sri: true,
29+
},
30+
override: true,
31+
}),
1532
],
1633
server: {
1734
port: 3000,

web/yarn.lock

+141-3
Original file line numberDiff line numberDiff line change
@@ -2625,6 +2625,11 @@ binary-extensions@^2.0.0:
26252625
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
26262626
integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
26272627

2628+
boolbase@^1.0.0:
2629+
version "1.0.0"
2630+
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
2631+
integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
2632+
26282633
brace-expansion@^1.1.7:
26292634
version "1.1.11"
26302635
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -2731,6 +2736,35 @@ check-error@^2.1.1:
27312736
resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc"
27322737
integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==
27332738

2739+
cheerio-select@^2.1.0:
2740+
version "2.1.0"
2741+
resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
2742+
integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==
2743+
dependencies:
2744+
boolbase "^1.0.0"
2745+
css-select "^5.1.0"
2746+
css-what "^6.1.0"
2747+
domelementtype "^2.3.0"
2748+
domhandler "^5.0.3"
2749+
domutils "^3.0.1"
2750+
2751+
cheerio@^1.0.0:
2752+
version "1.0.0"
2753+
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0.tgz#1ede4895a82f26e8af71009f961a9b8cb60d6a81"
2754+
integrity sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==
2755+
dependencies:
2756+
cheerio-select "^2.1.0"
2757+
dom-serializer "^2.0.0"
2758+
domhandler "^5.0.3"
2759+
domutils "^3.1.0"
2760+
encoding-sniffer "^0.2.0"
2761+
htmlparser2 "^9.1.0"
2762+
parse5 "^7.1.2"
2763+
parse5-htmlparser2-tree-adapter "^7.0.0"
2764+
parse5-parser-stream "^7.1.2"
2765+
undici "^6.19.5"
2766+
whatwg-mimetype "^4.0.0"
2767+
27342768
chokidar@^3.5.1:
27352769
version "3.6.0"
27362770
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
@@ -2827,11 +2861,27 @@ cosmiconfig@^8.1.3:
28272861
parse-json "^5.2.0"
28282862
path-type "^4.0.0"
28292863

2864+
csp-toolkit@^1.1.0:
2865+
version "1.1.1"
2866+
resolved "https://registry.yarnpkg.com/csp-toolkit/-/csp-toolkit-1.1.1.tgz#0accde28ffb58aa18718ef694f1111457f6ee411"
2867+
integrity sha512-751JAEuJbAMqDmWTnfKTjrTU49yfOxofQC2LAtuspQmi3Q44yqBZnYWv0AufiuhmIjhYoO0vghWzrKtM7zwxkg==
2868+
28302869
css-color-keywords@^1.0.0:
28312870
version "1.0.0"
28322871
resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
28332872
integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==
28342873

2874+
css-select@^5.1.0:
2875+
version "5.1.0"
2876+
resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
2877+
integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
2878+
dependencies:
2879+
boolbase "^1.0.0"
2880+
css-what "^6.1.0"
2881+
domhandler "^5.0.2"
2882+
domutils "^3.0.1"
2883+
nth-check "^2.0.1"
2884+
28352885
28362886
version "3.2.0"
28372887
resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32"
@@ -2841,6 +2891,11 @@ [email protected]:
28412891
css-color-keywords "^1.0.0"
28422892
postcss-value-parser "^4.0.2"
28432893

2894+
css-what@^6.1.0:
2895+
version "6.1.0"
2896+
resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
2897+
integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
2898+
28442899
css.escape@^1.5.1:
28452900
version "1.5.1"
28462901
resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
@@ -2916,6 +2971,36 @@ dom-accessibility-api@^0.6.3:
29162971
resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8"
29172972
integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==
29182973

2974+
dom-serializer@^2.0.0:
2975+
version "2.0.0"
2976+
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
2977+
integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
2978+
dependencies:
2979+
domelementtype "^2.3.0"
2980+
domhandler "^5.0.2"
2981+
entities "^4.2.0"
2982+
2983+
domelementtype@^2.3.0:
2984+
version "2.3.0"
2985+
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
2986+
integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
2987+
2988+
domhandler@^5.0.2, domhandler@^5.0.3:
2989+
version "5.0.3"
2990+
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
2991+
integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
2992+
dependencies:
2993+
domelementtype "^2.3.0"
2994+
2995+
domutils@^3.0.1, domutils@^3.1.0:
2996+
version "3.2.2"
2997+
resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78"
2998+
integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==
2999+
dependencies:
3000+
dom-serializer "^2.0.0"
3001+
domelementtype "^2.3.0"
3002+
domhandler "^5.0.3"
3003+
29193004
dot-case@^3.0.4:
29203005
version "3.0.4"
29213006
resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
@@ -2945,7 +3030,15 @@ electron-to-chromium@^1.5.73:
29453030
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.82.tgz#b9116ac6d6b6346c2baa49f14c1272ba2ce1ccdb"
29463031
integrity sha512-Zq16uk1hfQhyGx5GpwPAYDwddJuSGhtRhgOA2mCxANYaDT79nAeGnaXogMGng4KqLaJUVnOnuL0+TDop9nLOiA==
29473032

2948-
entities@^4.4.0, entities@^4.5.0:
3033+
encoding-sniffer@^0.2.0:
3034+
version "0.2.0"
3035+
resolved "https://registry.yarnpkg.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz#799569d66d443babe82af18c9f403498365ef1d5"
3036+
integrity sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==
3037+
dependencies:
3038+
iconv-lite "^0.6.3"
3039+
whatwg-encoding "^3.1.1"
3040+
3041+
entities@^4.2.0, entities@^4.4.0, entities@^4.5.0:
29493042
version "4.5.0"
29503043
resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
29513044
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
@@ -3193,6 +3286,16 @@ html-encoding-sniffer@^4.0.0:
31933286
dependencies:
31943287
whatwg-encoding "^3.1.1"
31953288

3289+
htmlparser2@^9.1.0:
3290+
version "9.1.0"
3291+
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23"
3292+
integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==
3293+
dependencies:
3294+
domelementtype "^2.3.0"
3295+
domhandler "^5.0.3"
3296+
domutils "^3.1.0"
3297+
entities "^4.5.0"
3298+
31963299
http-proxy-agent@^7.0.2:
31973300
version "7.0.2"
31983301
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e"
@@ -3209,7 +3312,7 @@ https-proxy-agent@^7.0.6:
32093312
agent-base "^7.1.2"
32103313
debug "4"
32113314

3212-
3315+
[email protected], iconv-lite@^0.6.3:
32133316
version "0.6.3"
32143317
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
32153318
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
@@ -3550,6 +3653,13 @@ npm-run-path@^4.0.1:
35503653
dependencies:
35513654
path-key "^3.0.0"
35523655

3656+
nth-check@^2.0.1:
3657+
version "2.1.1"
3658+
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
3659+
integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
3660+
dependencies:
3661+
boolbase "^1.0.0"
3662+
35533663
nwsapi@^2.2.16:
35543664
version "2.2.16"
35553665
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.16.tgz#177760bba02c351df1d2644e220c31dfec8cdb43"
@@ -3588,7 +3698,22 @@ parse-json@^5.2.0:
35883698
json-parse-even-better-errors "^2.3.0"
35893699
lines-and-columns "^1.1.6"
35903700

3591-
parse5@^7.2.1:
3701+
parse5-htmlparser2-tree-adapter@^7.0.0:
3702+
version "7.1.0"
3703+
resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz#b5a806548ed893a43e24ccb42fbb78069311e81b"
3704+
integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==
3705+
dependencies:
3706+
domhandler "^5.0.3"
3707+
parse5 "^7.0.0"
3708+
3709+
parse5-parser-stream@^7.1.2:
3710+
version "7.1.2"
3711+
resolved "https://registry.yarnpkg.com/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz#d7c20eadc37968d272e2c02660fff92dd27e60e1"
3712+
integrity sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==
3713+
dependencies:
3714+
parse5 "^7.0.0"
3715+
3716+
parse5@^7.0.0, parse5@^7.1.2, parse5@^7.2.1:
35923717
version "7.2.1"
35933718
resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a"
35943719
integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==
@@ -4179,6 +4304,11 @@ undici-types@~6.20.0:
41794304
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433"
41804305
integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==
41814306

4307+
undici@^6.19.5:
4308+
version "6.21.1"
4309+
resolved "https://registry.yarnpkg.com/undici/-/undici-6.21.1.tgz#336025a14162e6837e44ad7b819b35b6c6af0e05"
4310+
integrity sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==
4311+
41824312
universalify@^2.0.0:
41834313
version "2.0.1"
41844314
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
@@ -4231,6 +4361,14 @@ vite-plugin-checker@^0.8.0:
42314361
vscode-languageserver-textdocument "^1.0.1"
42324362
vscode-uri "^3.0.2"
42334363

4364+
vite-plugin-csp-guard@^2.0.1:
4365+
version "2.0.1"
4366+
resolved "https://registry.yarnpkg.com/vite-plugin-csp-guard/-/vite-plugin-csp-guard-2.0.1.tgz#5ab568859f96c5bf7f8f2992f1640b52c37d893b"
4367+
integrity sha512-ffcnQZO+utb9LM0ehf/lD+aCWXGOM7MiKX414YHE8ZQBD7cboJ6pbbJRDJ8n8R1u0zCK7Amh4fMGD3S+4oH9WQ==
4368+
dependencies:
4369+
cheerio "^1.0.0"
4370+
csp-toolkit "^1.1.0"
4371+
42344372
vite-plugin-svgr@^4.3.0:
42354373
version "4.3.0"
42364374
resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-4.3.0.tgz#742f16f11375996306c696ec323e4d23f6005075"

0 commit comments

Comments
 (0)