graph + mail dispatcher, test-email endpoint, notifications global
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# security
|
||||
|
||||
Generyczne nagłówki bezpieczeństwa HTTP (HSTS, X-Frame-Options, nosniff,
|
||||
Referrer-Policy, Permissions-Policy) jako funkcja do `next.config`. CSP CELOWO
|
||||
pominięte — zależy od domen projektu, zostaje w projekcie.
|
||||
|
||||
## Zasada
|
||||
|
||||
Nagłówki, które są IDENTYCZNE między projektami, plugin dostarcza raz. CSP
|
||||
(Content-Security-Policy) wymaga znajomości domen konkretnego projektu (skąd
|
||||
ładują się skrypty, obrazy, fonty, analytics), więc nie może być generyczne —
|
||||
zostaje w projekcie, dodawane przez `additional`.
|
||||
|
||||
## Użycie — next.config.ts
|
||||
|
||||
Nagłówki wpina się w `next.config`, NIE w proxy — bo muszą pokryć CAŁĄ
|
||||
aplikację (też `/admin`, statyki), a proxy pomija te trasy.
|
||||
|
||||
```ts
|
||||
// next.config.ts
|
||||
import { withPayload } from '@payloadcms/next/withPayload'
|
||||
import type { NextConfig } from 'next'
|
||||
import { buildSecurityHeaders } from '@intecion/ipal-kit'
|
||||
|
||||
const securityHeaders = buildSecurityHeaders({
|
||||
hsts: process.env.NODE_ENV === 'production', // WAŻNE: off w dev (http)
|
||||
additional: [
|
||||
// CSP projektu — zna swoje domeny:
|
||||
// { key: 'Content-Security-Policy', value: "default-src 'self'; ..." },
|
||||
],
|
||||
})
|
||||
|
||||
const nextConfig: NextConfig = {
|
||||
async headers() {
|
||||
return [{ source: '/:path*', headers: securityHeaders }]
|
||||
},
|
||||
}
|
||||
|
||||
export default withPayload(nextConfig)
|
||||
```
|
||||
|
||||
## Opcje
|
||||
|
||||
| Opcja | Domyślnie | Rola |
|
||||
|---|---|---|
|
||||
| `hsts` | `true` | Strict-Transport-Security (wymuś HTTPS) |
|
||||
| `hstsMaxAge` | `63072000` (2 lata) | max-age HSTS w sekundach |
|
||||
| `hstsIncludeSubDomains` | `true` | HSTS na subdomeny |
|
||||
| `hstsPreload` | `false` | preload (tylko jeśli zgłaszasz do listy) |
|
||||
| `frameOptions` | `'DENY'` | X-Frame-Options (anty-clickjacking) |
|
||||
| `referrerPolicy` | `'strict-origin-when-cross-origin'` | Referrer-Policy |
|
||||
| `permissionsPolicy` | blokuje camera/mic/geolocation | Permissions-Policy |
|
||||
| `additional` | `[]` | dodatkowe nagłówki (np. CSP); same-key nadpisuje |
|
||||
|
||||
## PUŁAPKA — HSTS w dev
|
||||
|
||||
HSTS nad HTTP na localhost może zablokować przeglądarkę na HTTPS dla localhost.
|
||||
ZAWSZE wyłączaj w dev: `hsts: process.env.NODE_ENV === 'production'`.
|
||||
|
||||
## Nadpisywanie i CSP
|
||||
|
||||
`additional` z tym samym kluczem NADPISUJE domyślny (np. zmień X-Frame-Options
|
||||
na SAMEORIGIN). Nowy klucz (jak CSP) dodaje. CSP zawsze przez `additional` —
|
||||
plugin go nie generuje, bo zależy od projektu.
|
||||
Reference in New Issue
Block a user