Skip to content

Commit daf3a7f

Browse files
committed
chore: removed security on server
1 parent efcdeb4 commit daf3a7f

File tree

8 files changed

+30
-188
lines changed

8 files changed

+30
-188
lines changed

README.md

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -703,30 +703,6 @@ ls -la .output/public/_nuxt/
703703
- **Rate limiting** - Handled by deployment platforms
704704
- **Input validation** - Use Valibot schemas for runtime validation
705705

706-
### Content Security Policy (CSP)
707-
708-
The project uses [`nuxt-security`](https://nuxt-security.vercel.app/) for OWASP-compliant security headers and Content Security Policy protection:
709-
710-
- **CSP Configuration** - Defined in `nuxt.config.ts` security section
711-
- **Prismic Integration** - Allows Prismic CMS domains and inline scripts
712-
- **Analytics Support** - Permits Google Analytics and Matomo tracking
713-
- **Data URLs** - Enables inline SVG images (`data:` protocol)
714-
- **WebSocket Connections** - Configured for real-time blockchain data
715-
716-
**Key CSP Directives:**
717-
718-
```json
719-
{
720-
"contentSecurityPolicy": {
721-
"img-src": ["'self'", "data:", "https://nimiq.prismic.io", "..."],
722-
"script-src": ["'self'", "https://stats.nimiq-network.com", "..."],
723-
"connect-src": ["'self'", "wss://nimiq-website.je-cf9.workers.dev", "..."]
724-
}
725-
}
726-
```
727-
728-
See the [Nuxt Security Module](https://nuxt-security.vercel.app/) for more details.
729-
730706
### Content Security
731707

732708
- **Draft content** - Only visible in local/internal-static-drafts environments

app/app.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const showConsentBanner = environment.isProduction || enableDevAnalytics
66
<template>
77
<div>
88
<NuxtPage />
9-
<ConsentBanner v-if="showConsentBanner" />
9+
<ConsentBanner v-if="true || showConsentBanner" />
1010
</div>
1111
</template>
1212

app/components/ConsentBanner.vue

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
<script setup lang="ts">
22
const CONSENT_VERSION = '1.0'
33
const { consent, acceptConsent, rejectConsent } = useMatomo()
4-
const open = computed(() => !consent.value || consent.value.version !== CONSENT_VERSION)
4+
const open = computed(() => {
5+
const version = consent.value?.version
6+
return !version || version !== CONSENT_VERSION
7+
})
58
</script>
69

710
<template>
8-
<AlertDialogRoot v-model:open="open">
11+
<AlertDialogRoot :open="open" :modal="false">
912
<AlertDialogPortal>
1013
<AlertDialogContent
1114
outline="~ 1.5 neutral/10"
@@ -15,7 +18,7 @@ const open = computed(() => !consent.value || consent.value.version !== CONSENT_
1518
0 -8px 12px 0 color-mix(in srgb, var(--colors-neutral-DEFAULT) 4%, transparent),
1619
0 8px 12px 0 color-mix(in srgb, var(--colors-neutral-DEFAULT) 4%, transparent);"
1720
>
18-
<AlertDialogTitle text="f-xl neutral-900" font-semibold leading-tight my-0>
21+
<AlertDialogTitle text="f-xl neutral-900" font-semibold leading-tight my-0 ml-0>
1922
Cookie Consent
2023
</AlertDialogTitle>
2124

app/error.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ useSeoMeta({
7474
const stack = props.error.stack
7575
// eslint-disable-next-line vue/no-mutating-props
7676
delete props.error.stack
77+
78+
console.error(props.error)
7779
</script>
7880

7981
<template>

nuxt.config.ts

Lines changed: 8 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ export default defineNuxtConfig({
2626
'@nuxt/scripts',
2727
'reka-ui/nuxt',
2828
'@nuxtjs/prismic',
29-
!environment.useNuxtHub && '@nuxtjs/seo', // Skip SEO for NuxtHub builds
3029
'@nuxtjs/device',
3130
'@nuxt/fonts',
3231
'@pinia/colada-nuxt',
3332
!environment.useNuxtHub && 'nuxt-module-feed', // Skip feed for NuxtHub builds
33+
!environment.useNuxtHub && 'nuxt-og-image', // Enable og-image only when not on NuxtHub
34+
'@nuxtjs/seo',
3435
'nuxt-safe-runtime-config',
35-
'nuxt-security',
3636
'motion-v/nuxt',
3737
'./modules/prerender-routes',
3838
environment.useNuxtHub && '@nuxthub/core',
@@ -53,81 +53,6 @@ export default defineNuxtConfig({
5353
},
5454
},
5555

56-
security: {
57-
hidePoweredBy: true,
58-
headers: {
59-
xFrameOptions: 'SAMEORIGIN',
60-
contentSecurityPolicy: {
61-
'script-src': environment.environment.isLocal
62-
? [
63-
'\'self\'',
64-
'\'unsafe-inline\'',
65-
'\'unsafe-eval\'',
66-
'https://static.cdn.prismic.io',
67-
'https://nimiq.prismic.io',
68-
'https://www.googletagmanager.com',
69-
'https://www.google-analytics.com',
70-
'https://stats.nimiq-network.com',
71-
]
72-
: [
73-
'\'strict-dynamic\'',
74-
'\'nonce-{{nonce}}\'',
75-
'\'unsafe-inline\'',
76-
'https://static.cdn.prismic.io',
77-
],
78-
'script-src-attr': environment.environment.isLocal
79-
? ['\'unsafe-inline\'']
80-
: ['\'none\''],
81-
'style-src': [
82-
'\'self\'',
83-
'https:',
84-
'\'unsafe-inline\'',
85-
],
86-
'base-uri': ['\'none\''],
87-
'font-src': [
88-
'\'self\'',
89-
'https:',
90-
'data:',
91-
],
92-
'object-src': ['\'none\''],
93-
'frame-src': ['\'self\'', 'https://nimiq.prismic.io', 'https://map.nimiq.com'],
94-
'connect-src': [
95-
'\'self\'',
96-
'wss://nimiq-website.je-cf9.workers.dev',
97-
'https://nimiq-website.je-cf9.workers.dev',
98-
'https://www.google-analytics.com',
99-
'https://analytics.google.com',
100-
'https://stats.g.doubleclick.net',
101-
'https://stats.nimiq-network.com',
102-
'https://mycbdmurjytbdahjljoh.supabase.co',
103-
'https://nimiq.prismic.io',
104-
'https://dev.validators-api-mainnet.pages.dev',
105-
'https://validators-api-mainnet.nuxt.dev',
106-
'https://nimiq.cdn.prismic.io',
107-
],
108-
'upgrade-insecure-requests': true,
109-
'img-src': [
110-
'\'self\'',
111-
'data:',
112-
'https://nimiq.prismic.io',
113-
'https://static.cdn.prismic.io',
114-
'https://images.prismic.io',
115-
'https://nimiq.cdn.prismic.io',
116-
'https://www.google-analytics.com',
117-
'https://www.googletagmanager.com',
118-
'https://*.google.com',
119-
'https://*.google.co.th',
120-
'https://*.google.co.uk',
121-
'https://*.google.de',
122-
'https://*.google.fr',
123-
],
124-
},
125-
crossOriginOpenerPolicy: false,
126-
crossOriginEmbedderPolicy: false,
127-
xXSSProtection: '1; mode=block',
128-
},
129-
},
130-
13156
devtools: { enabled: true },
13257

13358
components: [
@@ -382,14 +307,15 @@ export default defineNuxtConfig({
382307
},
383308

384309
// Disable og-image generation on NuxtHub (Cloudflare) due to @resvg/resvg-js native bindings incompatibility
385-
ogImage: environment.useNuxtHub
386-
? undefined
387-
: {
388-
fonts: ['Mulish:400', 'Mulish:700'],
389-
},
310+
// Moved into conditional spread below to appease TS/ESLint config typing
390311

391312
// Feed configuration - skip for NuxtHub builds
392313
...(!environment.useNuxtHub && {
314+
// eslint-disable-next-line ts/ban-ts-comment
315+
// @ts-ignore Provided by nuxt-og-image module
316+
ogImage: {
317+
fonts: ['Mulish:400', 'Mulish:700'],
318+
},
393319
feed: {
394320
sources: [
395321
{ path: '/feed.xml', type: 'rss2', cacheTime: 0 },

package.json

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,18 @@
2525
"dependencies": {
2626
"@nimiq/core": "catalog:nimiq",
2727
"@nimiq/utils": "catalog:nimiq",
28-
"@nuxt/scripts": "catalog:",
29-
"@nuxtjs/seo": "catalog:",
28+
"@nuxt/scripts": "catalog:nuxt",
29+
"@nuxtjs/seo": "catalog:nuxt",
3030
"@pinia/colada": "catalog:frontend",
3131
"@pinia/colada-nuxt": "catalog:frontend",
3232
"@pinia/colada-plugin-delay": "catalog:frontend",
3333
"@unovis/ts": "catalog:frontend",
3434
"@unovis/vue": "catalog:frontend",
3535
"@vueuse/router": "catalog:frontend",
3636
"medium-zoom": "catalog:frontend",
37-
"motion-v": "catalog:",
37+
"motion-v": "catalog:frontend",
3838
"nimiq-rpc-client-ts": "catalog:nimiq",
3939
"nuxt": "catalog:nuxt",
40-
"nuxt-security": "catalog:",
4140
"reka-ui": "catalog:frontend",
4241
"valibot": "catalog:server",
4342
"vaul-vue": "catalog:frontend",
@@ -62,7 +61,7 @@
6261
"@types/node": "catalog:types",
6362
"@unocss/eslint-plugin": "catalog:lint",
6463
"@unocss/nuxt": "catalog:unocss",
65-
"@unocss/preset-wind4": "catalog:",
64+
"@unocss/preset-wind4": "catalog:unocss",
6665
"@unocss/reset": "catalog:unocss",
6766
"@vueuse/core": "catalog:frontend",
6867
"@vueuse/nuxt": "catalog:frontend",
@@ -75,7 +74,7 @@
7574
"nimiq-icons": "catalog:unocss",
7675
"nuxt": "catalog:nuxt",
7776
"nuxt-module-feed": "catalog:nuxt",
78-
"nuxt-safe-runtime-config": "catalog:",
77+
"nuxt-safe-runtime-config": "catalog:nuxt",
7978
"pinia": "catalog:frontend",
8079
"sharp": "catalog:server",
8180
"simple-git-hooks": "catalog:lint",

0 commit comments

Comments
 (0)