You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Luis' latest review on #184 approved the secure CORS default, but left several non-blocking hardening notes that should not be lost after the production-readiness batch merges.
The shipped behavior is correct for the main rollout, but there are edge cases worth tightening in a follow-up.
Follow-up work
Treat a bare * anywhere inside a comma-separated CORS_ORIGIN allowlist as the deliberate wide-open case. Today CORS_ORIGIN="https://app.example.com,*" silently opens CORS to every origin while the warning says the * entry is unlikely to match.
Add a negative allowlist test proving entries are exact matches, not prefix or substring matches.
Document or mitigate the Vary: Origin cache behavior for multi-origin allowlists, especially the non-matching case that emits Access-Control-Allow-Origin: null.
Context
Luis' latest review on #184 approved the secure CORS default, but left several non-blocking hardening notes that should not be lost after the production-readiness batch merges.
The shipped behavior is correct for the main rollout, but there are edge cases worth tightening in a follow-up.
Follow-up work
*anywhere inside a comma-separatedCORS_ORIGINallowlist as the deliberate wide-open case. TodayCORS_ORIGIN="https://app.example.com,*"silently opens CORS to every origin while the warning says the*entry is unlikely to match.Vary: Origincache behavior for multi-origin allowlists, especially the non-matching case that emitsAccess-Control-Allow-Origin: null.cors: false, Yoga's CORS preflight short-circuit is absent, so P0: Add per-IP request rate limiting (#166) #185's localOPTIONSexemption is load-bearing.x-request-id, updateallowedHeadersfromcontent-typeto include it, otherwise preflight will reject those requests.Acceptance criteria
CORS_ORIGINparsing handles*consistently whether it is the whole value or one entry in a list.https://evil-example.comdoes not matchhttps://example.com.Origincache behavior for CDN/LB layers when using multi-origin allowlists.OPTIONSexemption is not later removed as redundant.Related