initvglidrbtgrthijl;
This commit is contained in:
@@ -34,20 +34,25 @@ export let env = {
|
||||
cryptoKeyPath: p.VAULT_CRYPTO_KEY_PATH || 'crypto/master',
|
||||
},
|
||||
cors: {
|
||||
// Каждый деплой явно указывает CORS_ORIGINS, иначе пустой массив = нет cross-origin.
|
||||
// Validate каждый origin через URL parse — отклоняем мусор. Default https-only для prod-safety.
|
||||
origins: (p.CORS_ORIGINS || '')
|
||||
.split(',')
|
||||
.map((o) => o.trim())
|
||||
.filter(Boolean)
|
||||
.filter((o) => {
|
||||
// CORS_ORIGINS:
|
||||
// - comma-separated list of origins → whitelist (recommended for prod)
|
||||
// - "*" → wildcard, любой origin принят (для dev/staging)
|
||||
// - "" → cross-origin blocked (fail-secure default)
|
||||
// Wildcard incompatible с CORS_ALLOW_CREDENTIALS=true (browser spec).
|
||||
origins: (() => {
|
||||
const raw = (p.CORS_ORIGINS || '').split(',').map((o) => o.trim()).filter(Boolean);
|
||||
// Wildcard sentinel — единственное значение `*` активирует wildcard mode.
|
||||
if (raw.length === 1 && raw[0] === '*') return ['*'];
|
||||
// Иначе строгая URL-валидация каждого origin'а.
|
||||
return raw.filter((o) => {
|
||||
try {
|
||||
const u = new URL(o);
|
||||
return u.protocol === 'https:' || u.protocol === 'http:';
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}),
|
||||
});
|
||||
})(),
|
||||
// Default = false (fail-secure). Чтобы включить credentials cross-origin —
|
||||
// ОБЯЗАТЕЛЬНО явный CORS_ALLOW_CREDENTIALS=true.
|
||||
allowCredentials: p.CORS_ALLOW_CREDENTIALS === 'true',
|
||||
|
||||
Reference in New Issue
Block a user